Положение актеров слоя libgdx scene2dUI
У меня проблема с настройкой положения кнопок на моем слое сцен. Я пытаюсь построить меню и заполнить его кнопками, но они, кажется, игнорируют такие команды, как 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);
И там ничего не происходит. Кнопки игнорируют эти команды и располагаются один за другим горизонтально.
Есть что-то, о чем я мог забыть?
2 ответа
Таблицы в 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();
, Это помещает все, что вы добавляете в таблицу после этого, в новую строку прямо под ней. Чтобы все выглядело немного лучше, вы можете использовать отступы.
Надеюсь это поможет
Из вики libgdx
"s Table
:
Table - это WidgetGroup, которая устанавливает позицию и размер своих дочерних элементов, используя логическую таблицу...
Так что в основном, как только вы добавили singleplayerButton
в layer
его положение определяется его положением в таблице. setPosition
будет проигнорировано в этом случае. Если вы хотите установить положение кнопки вручную, Table
это не ваш лучший вариант. Весь смысл Table
чтобы избавить пользователя от необходимости определять положение и размер детей.