Положение актеров слоя 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 чтобы избавить пользователя от необходимости определять положение и размер детей.

Другие вопросы по тегам