2013-03-04 2 views
12

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

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

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

Может ли кто-нибудь прояснить это для меня?

ответ

23

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

+0

Хорошо, хотя я ... Я проверил документацию по InputMultiplexer ... ваш ответ делает смысл. Я попробую этот подход ... надеюсь, это сработает. Tnx много! :) Я знаком с обработкой входных данных в Android, надеюсь, что он работает аналогично :) – Veljko

Смежные вопросы