问题描述
我在场景层上配置按钮的位置时遇到问题。
我正在尝试构建菜单,并用按钮填充它,但是它们似乎忽略了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);
那里什么也没有发生。 按钮将忽略这些命令,并将其自身水平放置。
有什么我可以忘记的吗?
1楼
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。
希望这可以帮助
2楼
来自libgdx
的Table
上的 :
Table是一个WidgetGroup,它使用逻辑表设置其子代的位置和大小。
因此,基本上,一旦将singleplayerButton
添加到layer
,它的位置就由它在Table中的位置来设置。
在这种情况下, setPosition
将被忽略。
如果要手动设置按钮的位置,“ Table
不是最佳选择。
Table
是使用户不必定义孩子的位置和大小。