libgdx multiple objects implementing InputProcessor

懵懂的女人 提交于 2019-12-30 05:58:22

问题


So on my Screen I have two objects of the same class that implement InputProcessor with the following keyDown() method:

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

The problem is when I instantiate these two objects, only the last one instantiated receives any keyDown events. I need both objects (or however many there are) to receive keyDown events.


回答1:


You need to use an InputMultiplexer to forward the events to both InputProcessors. It will look like this:

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

The multiplexer works like some kind of switch/hub. It receives the events from LibGDX and then deletegates them to both processors. In case the first processor returns true in his implementation, it means that the event was completely handled and it won't be forwarded to the second processor anymore. So in case you always want both processors to receive the events, you need to return false.




回答2:


Here is a code sample on LibGDX.info showing how to implement multiplexing with LibGDX:

https://libgdx.info/multiplexing/

I hope it helps



来源:https://stackoverflow.com/questions/23546544/libgdx-multiple-objects-implementing-inputprocessor

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!