本文内容包括:
①自定义颜色
②自定义角色
正文如下:
-----------------------------------
自定义颜色
说明
在尝试为游戏创建一个新角色的过程中,不可避免的是,你会想给角色创建一个新的颜色。正如铁甲战士是红色的,静默猎手是绿色的,你的自定义角色也需要一个颜色,可能是青色,橙色或者黄色。
枚举
杀戮尖塔游戏本体使用AbstractCard.CardColor枚举表示颜色,所以为了给游戏添加新颜色,你应该使用ModTheSpire的枚举补丁特性,除此之外,还有要把它注册到BaseMod中。
你还需要定义一个卡牌颜色和卡牌库类型值,并且它们必须有完全相同的名字。
下面是一个例子,展示了如何做到这一点:
-----------------------------------
import com.evacipated.cardcrawl.modthespire.lib.SpireEnum;
import com.megacrit.cardcrawl.cards.AbstractCard;
public class AbstractCardEnum {
@SpireEnum
public static AbstractCard.CardColor MOD_NAME_COLOR;
}
-----------------------------------
import com.evacipated.cardcrawl.modthespire.lib.SpireEnum;
import com.megacrit.cardcrawl.helpers.CardLibrary;
public class LibraryTypeEnum {
@SpireEnum
public static CardLibrary.LibraryType MOD_NAME_COLOR;
}
-----------------------------------
如何使用
除了为CardColor枚举定义补丁外,你还需要向BaseMod注册自定义颜色,以便它能够正确地实现与该颜色相关的其余功能。例如,你需要指定到能量球和卡片背景的路径。为此,你会需要调用本百科页面API部分中详细介绍的addColor方法。然而,在@SpireInitializer中调用addColor方法是非常重要的。不要在postInitialize或任何其他hook中调用它。一般来说,你想把你的模组名称作为颜色的前缀,这样即使你和别人使用相同的颜色,也不会遇到意想不到的兼容性问题。
API(应用程序接口)
color - 这应该是自定义颜色
bgColor - 背景颜色
backColor - 背景色
frameColor - 框架颜色
frameOutlineColor - 框架轮廓颜色
descBoxColor - 说明框颜色
trailVfx - 视觉效果尾色
glowColor - 微光颜色
attackBg - 攻击背景图像的路径 (路径从jar的根目录开始)
skillBg - 技能背景图像的路径 (路径从jar的根目录开始)
powerBg - 能力背景图像的路径 (路径从jar的根目录开始)
(注:这里指的应该是攻击,技能,能力牌不同形状的贴图框吧)
energyOrb - 能量球图像路径 (路径从jar的根目录开始)
attackBgPortrait - 卡牌查看视图的攻击背景图像的路径 (路径从jar的根目录开始)
skillBgPortrait - 卡牌查看视图的技能背景图像路径(路径从jar的根目录开始)
powerBgPortrait - 卡牌查看视图的能力背景图像的路径 (路径从jar的根路径开始)
energyOrbPortrait - 卡片牌查看视图的能量球图像路径 (路径从jar的根目录开始)
cardEnergyOrb - 你的卡牌小能量球图像描述的路径
-----------------------------------
addColor(AbstractCard.CardColor color, Color everythingColor, String attackBg, String skillBg, String powerBg, String energyOrb, String attackBgPortrait, String skillBgPortrait, String powerBgPortrait, String energyOrbPortrait, String cardEnergyOrb)
-----------------------------------
everythingColor - 对先前版本的所有颜色参数使用相同的颜色
自定义角色
游戏本体使用AbstractPlayer.PlayerClass枚举表示角色选项,所以为了添加一个新角色到游戏中,除了注册它到BaseMod,你还需要使用ModTheSpire的enum补丁功能。下面是一个例子,展示了如何做到这一点:
-----------------------------------
import com.evacipated.cardcrawl.modthespire.lib.SpireEnum;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
public class MyPlayerClassEnum {
@SpireEnum
public static AbstractPlayer.PlayerClass MY_PLAYER_CLASS;
}
-----------------------------------
要求
1.(前置条件)用BaseMod为玩家注册一个新的自定义颜色-看看这里是怎么做的https://github.com/daviscook477/BaseMod/wiki/Custom-Colors
2.定义一个具有public class CharSelectInfo getLoadout()方法的自定义角色类
3.将自定义角色注册到BaseMod
API
注意,addCharacter只能在EditCharactersSubscriber的receiveEditCharacters回调中调用
addCharacter(Class characterClass, String titleString, String classString, String color, String selectText, String selectButton, String portrait, String characterID)
character - 你的角色的一个实例
color - 这个角色的自定义颜色的名称,例如:MY_CUSTOM_COLOR.toString()
其中MY_CUSTOM_COLOR是该字符颜色的枚举值
selectButtonPath - 选择按钮贴图的路径(从jar的根目录开始)
portraitPath - 你的角色选择描述贴图路径(从你的jar的根目录开始)(尺寸: 1920px x 1200px)
characterID - 应该是MY_PLAYER_CLASS, MY_PLAYER_CLASS是这个角色的类的枚举值
例子
要添加自定义角色,必须执行以下两个步骤——定义自定义角色并将其注册到BaseMod。
定义一个自定义角色(比较长)
-----------------------------------
import java.util.ArrayList;
import com.badlogic.gdx.math.MathUtils;
import com.esotericsoftware.spine.AnimationState;
import com.megacrit.cardcrawl.actions.utility.ExhaustAllEtherealAction;
import com.megacrit.cardcrawl.characters.AbstractPlayer;
import com.megacrit.cardcrawl.core.EnergyManager;
import com.megacrit.cardcrawl.core.Settings;
import com.megacrit.cardcrawl.dungeons.AbstractDungeon;
import com.megacrit.cardcrawl.powers.AbstractPower;
import com.megacrit.cardcrawl.screens.CharSelectInfo;
import com.megacrit.cardcrawl.unlock.UnlockTracker;
//创建角色类,继承自定义角色
public class MyCharacter extends CustomPlayer {
public static final int ENERGY_PER_TURN = 3; // 你每回合的能量是多少
public static final String MY_CHARACTER_SHOULDER_2 = "img/char/shoulder2.png"; // 火堆姿势
public static final String MY_CHARACTER_SHOULDER_1 = "img/char/shoulder1.png"; // 另一个火堆姿势
public static final String MY_CHARACTER_CORPSE = "img/char/corpse.png"; // 角色死亡时的尸体
public static final String MY_CHARACTER_SKELETON_ATLAS = "img/char/skeleton.atlas"; // spine animation atlas(指的是骨架?)
public static final String MY_CHARACTER_SKELETON_JSON = "img/char/skeleton.json"; // spine animation json(骨架json)
//继承父类构造方法,传递参数name, MyPlayerClassEnum.MY_PLAYER_CLASS
public MyCharacter (String name) {
super(name, MyPlayerClassEnum.MY_PLAYER_CLASS);
this.dialogX = (this.drawX + 0.0F * Settings.scale); // 设置文本气泡的位置
this.dialogY = (this.drawY + 220.0F * Settings.scale); // 你可以复制这些值
initializeClass(null, MY_CHARACTER_SHOULDER_2, // 需要调用加载贴图和设置能量/加载
MY_CHARACTER_SHOULDER_1,
MY_CHARACTER_CORPSE,
getLoadout(), 20.0F, -10.0F, 220.0F, 290.0F, new EnergyManager(ENERGY_PER_TURN));
loadAnimation(MY_CHARACTER_SKELETON_ATLAS, MY_CHARACTER_SKELETON_JSON, 1.0F); // 如果你使用的是基础游戏动画的修改版本,或者在(骨架?)中制作动画,请确保包括这一点和以下几行
AnimationState.TrackEntry e = this.state.setAnimation(0, "animation", true);
e.setTime(e.getEndTime() * MathUtils.random());
}
public static ArrayList<String> getStartingDeck() { // 初始牌组,没什么好说的
//将初始卡牌添加到集合
ArrayList<String> retVal = new ArrayList<>();
retVal.add("MyCard0");
retVal.add("MyCard0");
retVal.add("MyCard0");
retVal.add("MyCard0");
retVal.add("MyCard1");
retVal.add("MyCard1");
retVal.add("MyCard1");
retVal.add("MyCard1");
retVal.add("MyCard2");
return retVal;
}
public static ArrayList<String> getStartingRelics() { // 添加初始遗物 - 也挺简单
ArrayList<String> retVal = new ArrayList<>();
retVal.add("MyRelic");
UnlockTracker.markRelicAsSeen("MyRelic");
return retVal;
}
//初始血量
public static final int STARTING_HP = 75;
//初始血上限
public static final int MAX_HP = 75;
//初始金币数
public static final int STARTING_GOLD = 99;
public static final int HAND_SIZE = 5;
public static CharSelectInfo getLoadout() { // 其余的角色面板内容,包括你的角色选择页面信息加上HP和初始金币
return new CharSelectInfo("My Character", "My character is a person from the outer worlds. He makes magic stuff happen.",
STARTING_HP, MAX_HP, ORB_SLOTS, STARTING_GOLD, HAND_SIZE,
this, getStartingRelics(), getStartingDeck(), false);
}
}
-----------------------------------
添加到BaseMod
注意,如果要做到这一点,你的mod必须为角色添加必要的自定义颜色,就像之前的百科页面上的自定义颜色所说的那样。
-----------------------------------
@SpireInitializer
//创建MyMod类实现EditCharactersSubscriber接口
public class MyMod implements EditCharactersSubscriber {
//构造函数,调用BaseMod里的subscribeToEditCharacters方法
public MyMod() {
BaseMod.subscribeToEditCharacters(this);
}
public static void initialize() {
MyMod mod = new MyMod();
}
//对receiveEditCharacters()方法进行重载
@Override
public void receiveEditCharacters() {
logger.info("begin editing characters");
logger.info("add " + MyPlayerClassEnum.MY_PLAYER_CLASS.toString());
BaseMod.addCharacter(new MyCharcter(CardCrawlGame.playerName),
MY_CHARACTER_BUTTON,
MY_CHARACTER_PORTRAIT,
MyPlayerClassEnum.MY_PLAYER_CLASS);
logger.info("done editing characters");
}
}
-----------------------------------#杀戮尖塔# #翻译# #mod#
参考链接:https://github.com/daviscook477/BaseMod/wiki/Custom-Colors
https://github.com/daviscook477/BaseMod/wiki/Custom-Characters
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com