什么,其他.row()可以导致libgdx表开始新行?

时间:2014-10-23 23:15:19

标签: libgdx

这对我来说有点神秘,但我在libgdx中有一张表,其中所有内容都垂直放置在新单元格中;

image of cells appearing vertically with debug on

我没有在任何地方使用.row()。 可能在这里做一些愚蠢的事情,但我无法看到它。 关于什么可能导致这种情况的线索?

(如果需要,我会发布代码,但它不是那么整洁,看到我认为知道任何可能导致换行的会帮助我,不一定需要它)

修改的 试图将代码缩减到添加项目时发生的所有位

代码;

//添加时触发的功能

// SSSNode是项目详细信息的语义参考,它只是被制作成像对象的标签

public void addItem(SSSNode itemsnode){

    Item newitem = new Item(itemsnode); //Item extends label    
    allItems.add(newitem);

    super.add(newitem).size(60, 30).top().left().fillY().expandY();

    //pack();
    //super.invalidate();       
    //super.validate();  (tried doing pack, validate, and none...neither helped)

    //update the GUI bar in case the inventory tab isnt there yet
    MainExplorationView.usersGUI.setDataVisible(true);


}

以下代码位于“usersGUI”中,它创建并处理名为inventory的弹出窗口,该弹出窗口在图片中是什么,是我无法表现的表格。

//ensures the interface for the inventory popup is setup and visible
//also refreshes the links 
public void setDataVisible(boolean visible){

    if (myContents.isVisible!=true){
        myContents.isVisible=visible;

        refreshlinks();
        setupInventory(); 
    }
}

private void refreshlinks() {
    super.clearChildren();
    super.addActor(backgroundobject);
    super.addActor(ME.playersInventory); //re adds the inventory panel table?

    int y = 440; 
    ME.playersInventory.validate(); //revalidated the table (I dumped this almost everywhere in frustration)
    //below is not relevant, it updates other items in a onscreen gui
    for (InterfaceButton link : allLinks) {     

        if (link.isVisible==true){

            link.setPosition(5,y);  
            super.addActor(link);
            y=y-30;
        }

    }

    backgroundobject.setSize(85, 200);
    backgroundobject.setPosition(0,y+20);           



}
//ensures inventory is setup once.
public void setupInventory() {

    if (setup){         
        return;     
    } 
    Log.info("setupInventory");


    ME.playersInventory.setPrefWidth(super.getWidth());

    Log.info("width is "+super.getWidth());

    ME.playersInventory.setHeight(200);


    ME.playersInventory.pack();

    float X = myContents.getX();
    float Y = myContents.getY()-ME.playersInventory.getHeight();

    Log.info("popping up inventory at:"+X+","+Y);
    ME.playersInventory.setPosition(X, Y);


    super.validate();
    setup=true;
}

完整代码也在GitHub上; https://github.com/ThomasWrobel/MeshExplorerGDX 整个项目是一个游戏,用于演示/测试和开源分布式语义数据库系统。相关的位是库存,也许是创建它的gui。

任何对LibGDXs工作有深入了解的人都应该认为不需要查看任何代码,如果其他东西可以告诉表开始新行。 (即,任何可能导致它自动发生的布局限制?)

2 个答案:

答案 0 :(得分:3)

结束当前行的

layout是使布局逻辑更简单的副作用。现在是fixed

注意Horizo​​ntalGroup仍然更适合您的用例,并且可以在任何索引处添加/删除actor。

答案 1 :(得分:1)

答案似乎是layout()导致新行; http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=15857&p=68533&hilit=layout#p68533

尽管文档没有说明这一点,但这仍然是它应该如何工作的。