在LibGDX窗口中有一个Cell困扰我

时间:2018-03-25 11:05:47

标签: java libgdx

我想我可能在LibGDX中发现了一个问题,但是在他们的GitHub中打开一个问题之前,我认为在这里讨论它会更好,因为我可能错了。

这就是我发生的事情:

我有一个名为Information的课程Window,我会在其中显示有关游戏角色的信息。由于我需要动态更新标签,我认为每次调用Window时,最好只删除setVisible(false)内的所有演员。以前工作过。所以这是我的代码:

public class Information extends Window {

private final static String TAG = Information.class.getName();
private Unit calledBy; //Variable to know who is calling


public Information (Skin skin) {

    //Setting the attributes
    super("Information", skin);
    this.setPosition(0, 0);
    this.setBounds(this.getX(), this.getY(), Constants.INFORMATION_WIDTH, Constants.INFORMATION_HEIGHT);
    this.setVisible(false);

}

@Override
public void setVisible(boolean visible) {
    if (!visible){
        SnapshotArray<Actor> actors = this.getChildren();
        while (actors.size > 0){
            actors.get(0).remove();
        }
    } else {
        this.add(new Label("Name: " + getCalledBy().getName(), getSkin()));
        this.row();
        this.add(new Label("Attack: " + getCalledBy().getAttack(), getSkin()));
        this.row();
        this.add(new Label("Defense: " + getCalledBy().getDefense(), getSkin()));
        this.row();
        this.add(new Label("Health: " + getCalledBy().getHealth(), getSkin()));
    }
    super.setVisible(visible);
}   

所以,每当我打电话给setVisible时,我都会创建或删除演员。问题是我第一次调用这个方法时,它工作得很好,但是第二次和连续几次,除了字符名称之外,它显示为Cell,没有任何信息。

我调试了Actors的创建并删除了相同的内容并且所有内容似乎完美无缺。

所以我打算在LibGDX的GitHub中打开一个问题,但如果有人知道为什么会发生这种情况,我会更喜欢它。

提前致谢!

1 个答案:

答案 0 :(得分:0)

确定!所以我在回答我自己的问题,以防有人需要它。

感谢Tenfour04的评论,因为它帮助我找到了它。

正确的调用方法是clearChildren()。这是我的新代码:

    public void setVisible(boolean visible) {
    if (!visible){
        this.clearChildren();
    } else {
        this.add(new Label("Name: " + getCalledBy().getName(), getSkin()));
        this.row();
        this.add(new Label("Attack: " + getCalledBy().getAttack(), getSkin()));
        this.row();
        this.add(new Label("Defense: " + getCalledBy().getDefense(), getSkin()));
        this.row();
        this.add(new Label("Health: " + getCalledBy().getHealth(), getSkin()));
    }
    super.setVisible(visible);
}

希望将来可以帮助其他人。