libgdx scene2dUI层演员位置

libgdx scene2dUI layer actors position

我在场景图层上配置按钮位置时遇到问题。我正在尝试构建菜单,并用按钮填充它,但它们似乎忽略了 setPosition() 等命令

代码看起来像这样:

Table layerMenuControls = buildMenuControlsLayer();
stage.clear();
Stack stack = new Stack();
stage.addActor(stack);
stack.setSize(GameEngine.VIEWPORT_GUI_WIDTH, GameEngine.VIEWPORT_GUI_HEIGHT);
stack.add(layerBackground);
stack.add(layerMenuControls);


private Table buildMenuControlsLayer() {
        Table layer = new Table();
        singleplayerButton = new Button(swsSkin, "singlePlayerButton");
        singleplayerButton.setPosition((GameEngine.VIEWPORT_GUI_WIDTH / 2) - 64, 64);
        layer.add(singleplayerButton);

那里什么也没有发生。按钮忽略这些命令并水平放置自己。

有什么我可以忘记的吗?

wikilibgdxTable:

Table is a WidgetGroup that sets the position and size of its children using a logical table...

所以基本上,一旦您将 singleplayerButton 添加到 layer,它的位置由它在 Table 中的位置设置。 setPosition 在这种情况下将被忽略。如果您想手动设置按钮的位置,Table 不是您的最佳选择。 Table 的全部意义在于让用户无需定义子项的位置和大小。

LibGDX 中的表相对设置其 children 的位置。所以使用 setPosition 是行不通的。相反,您可以使用 Align

首先,您应该设置 table 的尺寸和位置,以便它知道在哪里对齐。我假设您希望 table 占据全屏,否则您可以相应地更改宽度和高度。以下将做到这一点

layer.setSize(GameEngine.VIEWPORT_GUI_WIDTH, GameEngine.VIEWPORT_GUI_HEIGHT); layer.setPosition(0,0);

然后您可以相对于此 table 定位按钮等。 为了将按钮设置在 table 的中央,您可以使用

layer.align(Align.center);

要定位在顶部中心,您可以使用

layer.align(Align.center|Align.top);

要停止在一行中添加所有按钮,您需要向 table 添加多行。在 layer.add(singlePlayerButton); 和您要添加的任何其他按钮之间,您只需调用 layer.row();。这会将您添加到 table 的任何内容放置在其正下方的新行上。为了让事情看起来更好一点,你可以使用填充。

希望对您有所帮助