LibGDX scene2D - swapActor可以用来改变表中的位置吗?

时间:2014-05-03 13:23:56

标签: libgdx scene2d

我想在libGDX表中交换两个标签的位置。我以为我可以使用swapActors来做这件事,但它并没有做到这一点。

private Stage stage;
private Table table;

public MainScreen() {

    stage = new Stage(new FitViewport(800, 480));
    table = new Table(SkinManagerImpl.getDefaultSkin());
    table.add("A").center();
    table.add("B").center();
    table.setFillParent(true);
    boolean succes=table.swapActor(0, 1);
    Gdx.app.log("", "success:"+succes);
    table.layout();
    stage.addActor(table);
}

@Override
    public void render(float delta) {
        // TODO Auto-generated method stub
        super.render(delta);
        stage.draw();
    }

成功是真的,但它仍然说" AB"而不是" BA"如所希望的那样。

还有另一种简单的方法可以在表格中交换两个单元格或演员(意味着交换位置)吗?

2 个答案:

答案 0 :(得分:2)

看一下 “ 公共Cell getCell(T actor)“API文档中的方法。

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Table.html#getCell-T-

现在看一下Cell docs:

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Cell.html

您可以获取每个Cell实例中的Actor实例,然后使用常规的旧交换方法交换它们。使用Cell.getActor和Cell.setActor。十分简单。

答案 1 :(得分:0)

我遇到了和你一样的问题和方法,经过一段时间的修补我发现table.swapActor工作得很好,如果你不调用布局。

一旦查找源代码,这就有意义了。似乎layout()将之前删除的actor重新分配到原始位置。

哦,添加一个scene2d动作让这看起来很漂亮:)