2014-05-08 25 views
11

所以我Screen我有同一個類的兩個對象是具有以下keyDown() method實施InputProcessor:libgdx多個對象實施InputProcessor

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

問題是,當我實例化這兩個對象,只有最後一個實例接收任何keyDown事件。我需要兩個對象(或者很多)來接收keyDown事件。

回答

34

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

+0

但這些InputProcessors在自己的對象。我希望每個對象都能處理它自己的輸入。如果我必須在Screen實例中完成,那麼在每個對象中都不需要InputProcessors,我必須從Screen對象中控制它們。 – TimSim

+0

對不起,我真的不明白這一點。 – noone

+0

我不明白你的例子。什麼是定製輸入處理器? – TimSim