当前位置: 代码迷 >> java >> libgdx scene2dUI层角色位置
  详细解决方案

libgdx scene2dUI层角色位置

热度:107   发布时间:2023-07-16 17:35:03.0

我在场景层上配置按钮的位置时遇到问题。 我正在尝试构建菜单,并用按钮填充它,但是它们似乎忽略了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);

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

有什么我可以忘记的吗?

LibGDX中的表相对地设置了其子级的位置。 因此,使用setPosition将不起作用。 相反,您可以使用Align

首先,您应该设置桌子的尺寸和位置,以使桌子知道对齐的位置。 我假设您希望桌子占据整个屏幕,否则,您可以相应地更改宽度和高度。 以下将做到这一点

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

然后,您可以相对于此桌子放置按钮等。 为了将按钮设置在表格的中央,您可以使用

layer.align(Align.center);

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

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

要停止所有按钮的一行添加,您需要向表中添加多行。 layer.add(singlePlayerButton); 以及要添加的任何其他按钮,只需调用layer.row(); 这会将您添加到表格之后的所有内容放置在表格正下方的新行上。 为了使外观更好看,您可以使用padding。

希望这可以帮助

来自libgdxTable上的 :

Table是一个WidgetGroup,它使用逻辑表设置其子代的位置和大小。

因此,基本上,一旦将singleplayerButton添加到layer ,它的位置就由它在Table中的位置来设置。 在这种情况下, setPosition将被忽略。 如果要手动设置按钮的位置,“ Table不是最佳选择。 Table是使用户不必定义孩子的位置和大小。