【PC游戏】杀戮尖塔basemod百科翻译(2)


3楼猫 发布时间:2023-03-09 23:38:39 作者:区区一个呆唯__ Language

本文内容包括:

自定义颜色

自定义角色


正文如下:

-----------------------------------

自定义颜色

说明

在尝试为游戏创建一个新角色的过程中,不可避免的是,你会想给角色创建一个新的颜色。正如铁甲战士是红色的,静默猎手是绿色的,你的自定义角色也需要一个颜色,可能是青色,橙色或者黄色。

枚举

杀戮尖塔游戏本体使用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


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com