我正在制作纸牌游戏的GUI,这是第一次使用libgdx。我是一名CS学生,相对缺乏经验的程序员。
我的想法是我有一个屏幕,我选择我的角色类型,当我选择角色时,正确的技能树会根据选择的角色填写屏幕右侧的表格。
我将所有角色技能树放入单独的类中,只是为了分离代码,否则它会变得超长。
我的show方法:
public void show() {
skin = new Skin(Gdx.files.internal("data/uiskin.json"));
stage = new Stage();
classList = new Table();
confirmTable = new Table();
skillTree = new Table();
info = new Label("Class Selection", skin);
masterTable = new Table();
//CLASSLIST STUFF
knight = new TextButton("knight", skin);
healer = new TextButton("healer", skin);
summoner = new TextButton("summoner", skin);
wizard = new TextButton("wizard", skin);
infiltrator = new TextButton("infiltrator", skin);
mercenary = new TextButton("mercenary", skin);
assassin = new TextButton("assassin", skin);
trader = new TextButton("trader", skin);
classList.add(knight).width(200).height(55).row();
classList.add(healer).width(200).height(55).row();
classList.add(summoner).width(200).height(55).row();
classList.add(wizard).width(200).height(55).row();
classList.add(infiltrator).width(200).height(55).row();
classList.add(mercenary).width(200).height(55).row();
classList.add(assassin).width(200).height(55).row();
classList.add(trader).width(200).height(55).row();
//CONFIRM TABLE STUFF
confirm = new TextButton("Confirm Selection", skin);
points = new Label("X/3 possible classes selected \nXX/XX points left unspent", skin);
confirmTable.add(points).height(100).row();
confirmTable.add(confirm).expand();
//LOADED SKILLTREE
skillTree.add(SoldierTree.soldier).expand();
//LOAD TABLES INTO MASTER TABLE
masterTable.add(classList).width(300).height(500).expand();
masterTable.add(skillTree).width(900).height(500).expand();
masterTable.row();
masterTable.add(confirmTable).width(300).height(220).expand();
masterTable.add(info).width(900).height(220).expand();
masterTable.setFillParent(true);
masterTable.setDebug(true);
stage.addActor(masterTable);
Gdx.input.setInputProcessor(stage);
}
和我的SoldierTree
public class SoldierTree {
private static Skin skin = new Skin(Gdx.files.internal("data/uiskin.json"));
public static Table soldier = new Table();
private static Table left = new Table();
private static Table middle = new Table();
private static Table right = new Table();
public static TextButton weapButton = new TextButton("weap", skin);
private static Label weapLabel = new Label("0/X", skin);
private static TextButton shieldButton = new TextButton("weap", skin);
private static Label shieldLabel = new Label("0/X", skin);
private static TextButton twoHanderButton = new TextButton("weap", skin);
private static Label twoHanderLabel = new Label("0/X", skin);
private static TextButton card1Button = new TextButton("weap", skin);
private static Label card1Label = new Label("0/X", skin);
private static TextButton healthButton = new TextButton("weap", skin);
private static Label healthLabel = new Label("0/X", skin);
private static TextButton armorButton = new TextButton("weap", skin);
private static Label armorLabel = new Label("0/X", skin);
private static TextButton pResistButton = new TextButton("weap", skin);
private static Label pResistLabel = new Label("0/X", skin);
private static TextButton card2Button = new TextButton("weap", skin);
private static Label card2Label = new Label("0/X", skin);
private static TextButton card3Button = new TextButton("weap", skin);
private static Label card3Label = new Label("0/X", skin);
private static TextButton staminaButton = new TextButton("weap", skin);
private static Label staminaLabel = new Label("0/X", skin);
private static TextButton sRegenButton = new TextButton("weap", skin);
private static Label sRegenLabel = new Label("0/X", skin);
private static TextButton card4Button = new TextButton("weap", skin);
private static Label card4Label = new Label("0/X", skin);
private static TextButton attackCostButton = new TextButton("weap", skin);
private static Label attackCostLabel = new Label("0/X", skin);
private static TextButton card5Button = new TextButton("weap", skin);
private static Label card5Label = new Label("0/X", skin);
public SoldierTree() {
left.add(weapButton);
left.add(weapLabel).row();
left.add(weapButton);
left.add(weapLabel).row();
left.add(weapButton);
left.add(weapLabel);
left.add(weapButton);
left.add(weapLabel);
middle.add(healthButton);
middle.add(healthLabel).row();
middle.add(healthButton);
middle.add(healthLabel);
middle.add(healthButton);
middle.add(healthLabel).row();
middle.add(healthButton);
middle.add(healthLabel).row();
middle.add(healthButton);
middle.add(healthLabel);
right.add(staminaButton);
right.add(staminaLabel).row();
right.add(staminaButton);
right.add(staminaLabel).row();
right.add(staminaButton);
right.add(staminaLabel).row();
right.add(staminaButton);
right.add(staminaLabel);
right.add(staminaButton);
right.add(staminaLabel);
soldier.add(left).width(300).height(500).expand();
soldier.add(middle).width(300).height(500).expand();
soldier.add(right).width(300).height(500).expand();
}
}
编辑:
输入时我已经意识到我做错了什么。 SoldierTree.soldier是静态的,但除非我调用Soldier的构造函数,否则表中没有加载东西。但在那种情况下,我将如何正确地构建这个?我觉得这是一种草率的方式来做到这一点。但是以这种方式这样做是否合理,然后在原始类中只创建一个新的SoldierTree(以及WizardTree和HealerTree以及其他任何角色),这样我可以随时调用他们的表?