【问题标题】:libgdx multiple objects implementing InputProcessorlibgdx 多个对象实现 InputProcessor
【发布时间】:2014-06-26 03:03:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    您需要使用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

    【讨论】:

    • 但是那些 InputProcessor 是它们自己的对象。我希望每个对象都处理自己的输入。如果我必须在 Screen 实例中执行此操作,那么每个对象中都不需要 InputProcessors,我必须从 Screen 对象中控制它们。
    • 对不起,我不太明白。
    • 我不明白你的例子。什么是自定义输入处理器?
    • 没关系,我可能对事件的传播方式没有清楚的了解。我会按照我知道可行的方式去做。
    • 自定义输入处理器当然是你的实现接口InputProcessor的类。
    【解决方案2】:

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

    https://libgdx.info/multiplexing/

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多