Libgdx多个对象实现InputProcessor

16

在我的屏幕上,我有两个实现了以下keyDown()方法的InputProcessor的同一类对象:

@Override
public boolean keyDown(int keycode) {
    if (keycode==fireKey) {
        System.out.println("Reporting keydown "+keyCode);
    }
    return false;
}
问题是当我实例化这两个对象时,只有最后一个实例化的对象会接收到任何keyDown事件。我需要所有的对象(或者有多少个)都能接收到keyDown事件。
2个回答

51

你需要使用InputMultiplexer将事件转发给两个InputProcessors。代码如下:

```java InputMultiplexer multiplexer = new InputMultiplexer(); multiplexer.addProcessor(firstInputProcessor); multiplexer.addProcessor(secondInputProcessor); Gdx.input.setInputProcessor(multiplexer); ```
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


但是这些InputProcessors都在它们自己的对象中。我希望每个对象都能处理自己的输入。如果我必须在Screen实例中完成它,那么每个对象中就不需要InputProcessors了,我必须从Screen对象中控制它们。 - TimSim
抱歉,我并不真正理解那个。 - noone
我不理解你的例子。什么是自定义输入处理器? - TimSim
没关系,我可能对事件如何传播没有清晰的理解。我会按照我知道的方法来做。 - TimSim
自定义输入处理器当然是实现InputProcessor接口的类。 - noone

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接