Подтвердить что ты не робот

Гигабайт Libgdx на экране (для кнопки паузы)

Я работаю над игрой, которая нуждается в графическом интерфейсе выше моего игрового экрана. Что-то вроде FrameLayout в Android.

У меня есть GameScreen, где все происходит. Теперь я хочу добавить кнопку "пауза", информацию о рекорде и т.д.

Я попытался объединить объект Stage с регулярным рисунком спрайта. Но у меня были некоторые проблемы с обработкой входных данных: как управлять, если пользователь нажал кнопку паузы на этапе или щелкнул область игры (где я должен добавить несколько пуль)...

Кто-нибудь может это понять для меня?

4b9b3361

Ответ 1

Вы можете использовать Stage для управления своим пользовательским интерфейсом. Чтобы правильно ввести ввод, вам нужно добавить InputMultiplexer так что Stage, а затем ваша текущая схема ввода будет получать входные данные.

Чтобы настроить его, вы сделаете что-то вроде этого:

InputMultiplexer multiplexer = new InputMultiplexer();
multiplexer.addProcessor(stage);
multiplexer.addProcessor(gameScreenInputProcessor);
Gdx.input.setInputProcessor(multiplexer);

(Пример кода на основе кода из https://code.google.com/p/libgdx/wiki/InputEvent)

Обратите внимание, что порядок важен (я предполагаю, что вам нужно, чтобы на этапе сначала были события, чтобы увидеть, затронут ли пользовательский интерфейс или нет). Кроме того, логическое возвращаемое значение из обработчиков входных событий более важно с мультиплексором, так как "обработанные" события не будут передаваться mutliplexer. События UI внутри Stage имеют свой собственный "обработанный" флаг (в основном он делает правильные вещи, но есть некоторые тонкие различия).

Один из альтернатив InputMultiplexer - создать "GameScreenActor" (новый подкласс Actor), который содержит текущий экран игры, который вы подключаете к глобальному Stage. Тем не менее, вам придется переместить обработку ввода на сцене scene2d. Вероятно, это не правильный выбор для вас, но он является жизнеспособным.