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