Несколько объектов libgdx, реализующих InputProcessor

Итак, на моем Screen у меня есть два объекта того же класса, которые реализуют InputProcessor со следующими keyDown() method:

@Override
public boolean keyDown(int keycode) {
    if (keycode==fireKey) {
        System.out.println("Reporting keydown "+keyCode);
    }
    return false;
}

Проблема заключается в том, когда я создаю эти два объекта, только последний экземпляр получает любые события keyDown. Мне нужны оба объекта (или сколько бы их там не было), чтобы получать события keyDown.

Ответ 1

Вам нужно использовать InputMultiplexer для пересылки событий на InputProcessors. Он будет выглядеть следующим образом:

InputProcessor inputProcessorOne = new CustomInputProcessorOne();
InputProcessor inputProcessorTwo = new CustomInputProcessorTwo();
InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(inputProcessorOne);
inputMultiplexer.addProcessor(inputProcessorTwo);
Gdx.input.setInputProcessor(inputMultiplexer);

Мультиплексор работает как какой-то коммутатор/концентратор. Он получает события от LibGDX, а затем удаляет их на обоих процессорах. В случае, если первый процессор возвращает true в своей реализации, это означает, что событие было полностью обработано и оно больше не будет перенаправлено второму процессору. Поэтому, если вы всегда хотите, чтобы оба процессора получили события, вам нужно вернуть false.

Ответ 2

Вот пример кода на LibGDX.info, показывающий, как реализовать мультиплексирование с помощью LibGDX:

https://libgdx.info/multiplexing/

Я надеюсь, что это поможет