Java 实现InputProcessor的libgdx多对象

Java 实现InputProcessor的libgdx多对象,java,libgdx,Java,Libgdx,因此,在我的屏幕上有两个类相同的对象,它们使用以下keyDown()方法实现InputProcessor: @Override public boolean keyDown(int keycode) { if (keycode==fireKey) { System.out.println("Reporting keydown "+keyCode); } return false; } 问题是当我实例化这两个对象时,只有最后一个实例化的对象接收任何keyD

因此,在我的
屏幕上
有两个类相同的对象,它们使用以下
keyDown()
方法实现
InputProcessor

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

您需要使用将事件转发到两个
输入处理器。它将如下所示:

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

以下是LibGDX.info上的代码示例,显示了如何使用LibGDX实现多路复用:


我希望这会有所帮助

,但这些输入处理器都在自己的对象中。我希望每个对象处理自己的输入。如果我必须在Screen实例中这样做,那么每个对象中都不需要输入处理器,我必须从Screen对象控制它们。对不起,我真的不理解。我不理解你的示例。什么是自定义输入处理器?没关系,我可能对事件如何传播没有清楚的理解。我会按照我知道的方式来做。自定义输入处理器当然是实现接口
InputProcessor
的类。