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()
,假设 width
和 height
是视口右上角的坐标并且您使用了 Align.topRight
.
我在屏幕右上角放置“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()
,假设 width
和 height
是视口右上角的坐标并且您使用了 Align.topRight
.