表中的表困境(libgdx)

时间:2017-01-12 16:21:13

标签: java libgdx

我正在制作纸牌游戏的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以及其他任何角色),这样我可以随时调用他们的表?

0 个答案:

没有答案