libgdx - 在屏幕右上角放置一个 table

libgdx - place a table on the top-right corner of the screen

我在屏幕右上角放置“table”时遇到问题:

|----------|
|         X|
|          |
|          |
|----------|

Table statusTable = new Table(skin);
statusTable.add(new DateLabel(skin));
statusTable.row();
statusTable.add(new TextButton("Funds:", skin));
statusTable.row();
statusTable.add(new TextButton("Tax rate:", skin));
...
this.statusTable.setPosition(width, height, Align.bottomLeft);

到达#setPosition 点,table 的宽度和高度设置为 0,因此定位以某种方式位于角落的中心:

|----------X
|          |
|          |
|          |
|----------|

我想我不太了解这种对齐方式是什么,在编写我自己的算法之前,我想知道是否存在更好的做法。

感谢任何评论。

大小是在运行时计算的,由于您不知道 table 的大小,我会让另一个 table 计算它的位置。

我会在 statusTable 之前添加一个空的扩展单元格,两者都在 rootTable 中,它填充了整个舞台(使用 setFillParent())

┌────────┬───┐
│        │ X │ -> empty expandX cell | statusTable | row
├────────┴───┤
│            │
│            │ -> empty expand, colspan(2) cell
│            │
└────────────┘

另一个 'solution' 可以在运行时设置 table 位置

Table statusTable = new Table(skin) {
    @Override
    public void act(float delta) {
        super.act(delta);
        setPosition(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), Align.topRight);
    }

};

如果您将 table 直接添加到舞台(例如,它不在其他 table 中),则设置 table 小部件来填充它会更容易parent,然后将其重力设置为右上角,以便其逻辑 table(小部件中的实际单元格)被拉到角落。

Table statusTable = new Table(skin);
statusTable.add(new DateLabel(skin));
statusTable.row();
statusTable.add(new TextButton("Funds:", skin));
statusTable.row();
statusTable.add(new TextButton("Tax rate:", skin));

// ...

statusTable.top().right();
statusTable.setFillParent(true);
stage.addActor(statusTable);

顺便说一句,你的方法不起作用的原因是table的大小还没有计算出来,如果它还没有被绘制,而你使用的是相反的你想要对齐的角。您可以在 setPosition 调用之前调用 statusTable().pack() ,假设 widthheight 是视口右上角的坐标并且您使用了 Align.topRight.