libgdx实现InputProcessor的多个对象

Tim*_*Sim 12 java libgdx

所以我在我Screen的同一个类中有两个实现InputProcessor的对象,具有以下内容InputProcessor:

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

问题是当我实例化这两个对象时,只有最后一个实例接收到任何keyDown事件.我需要两个对象(或者有许多对象)来接收keyDown事件.

noo*_*one 42

您需要使用a InputMultiplexer将事件转发到两者InputProcessors.它看起来像这样:

InputProcessor inputProcessorOne = new CustomInputProcessorOne();
InputProcessor inputProcessorTwo = new CustomInputProcessorTwo();
InputMultiplexer inputMultiplexer = new InputMultiplexer();
inputMultiplexer.addProcessor(inputProcessorOne);
inputMultiplexer.addProcessor(inputProcessorTwo);
Gdx.input.setInputProcessor(inputMultiplexer);
Run Code Online (Sandbox Code Playgroud)

多路复用器的工作方式与某种开关/集线器类似.它从LibGDX接收事件,然后将它们删除到两个处理器.如果第一个处理器true在其实现中返回,则意味着事件已完全处理,并且不再将其转发到第二个处理器.因此,如果您始终希望两个处理器都接收事件,则需要返回false.