因此,在我的Screen
上,我有两个使用以下InputProcessor
方法实现keyDown()
的同类的对象:
@Override
public boolean keyDown(int keycode) {
if (keycode==fireKey) {
System.out.println("Reporting keydown "+keyCode);
}
return false;
}
问题是当我实例化这两个对象时,只有最后一个实例接收到任何keyDown
个事件。我需要两个对象(或者有很多对象)来接收keyDown
个事件。
答案 0 :(得分:38)
您需要使用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
。
答案 1 :(得分:1)