【问题标题】:libgdx - place a table on the top-right corner of the screenlibgdx - 在屏幕右上角放置一个表格
【发布时间】:2020-08-03 14:34:58
【问题描述】:

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

|----------|
|         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 点,表格的宽度和高度设置为0,因此定位以某种方式以角为中心:

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

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

感谢您的任何评论。

【问题讨论】:

    标签: user-interface libgdx


    【解决方案1】:

    如果您将表格直接添加到舞台(例如,它不在某个其他表格内),则将表格小部件设置为填充它的父级会更容易,然后将其重力设置为右上角,使其符合逻辑表格(小部件中的实际单元格)被拉到角落。

    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);
    

    顺便说一句,您的方法不起作用的原因是,如果尚未绘制表格,则尚未计算表格的大小,并且您正在使用要对齐的对角。您可以在调用setPosition 之前调用statusTable().pack(),假设widthheight 是视口右上角的坐标并且您使用了Align.topRight,它应该可以工作。

    【讨论】:

    • 这对我不起作用,我猜桌子不在屏幕上;顺便说一句,我有 Stage stage = new Stage(new ScreenViewport(), batch);
    • => 抱歉,你是对的,我只是错过了#pack 电话!
    【解决方案2】:

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

    我会在 statusTable 之前添加一个空的展开单元格,这两个单元格都位于填充整个舞台的 rootTable 中(使用 setFillParent()

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

    另一个“解决方案”可能是在运行时设置表格位置

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

    【讨论】:

    • 请注意,上面的代码仅适用于 ScreenViewport 和以视口的世界中心为中心的相机,因为它使用屏幕宽度和高度作为假定的右上角坐标屏幕。
    • 谢谢!我不知道应用于表格的 top() 或 right() 方法。
    猜你喜欢
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多