2014-05-08 13 views
11

Also auf meinem Screen Ich habe zwei Objekte der gleichen Klasse, die InputProcessor mit folgenden keyDown() method implementieren:Libgdx mehr Objekte Implementierung InputProcessor

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

Das Problem ist, wenn ich diese beiden Objekte instanziiert, nur die letzte instanziiert empfängt alle keyDown-Ereignisse. Ich brauche beide Objekte (oder wie viele auch immer), um keyDown-Ereignisse zu empfangen.

Antwort

34

Sie müssen InputMultiplexer verwenden, um die Ereignisse an beide InputProcessors weiterzuleiten. Es sieht so aus:

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

Der Multiplexer funktioniert wie eine Art Schalter/Hub. Er empfängt die Ereignisse von LibGDX und löscht sie dann an beide Prozessoren. Falls der erste Prozessor in seiner Implementierung true zurückgibt, bedeutet dies, dass das Ereignis vollständig bearbeitet wurde und nicht mehr an den zweiten Prozessor weitergeleitet wird. Wenn also beide Prozessoren die Ereignisse empfangen sollen, müssen Sie false zurückgeben.

+0

Aber diese InputProcessors sind in Objekte ihrer eigenen hilft. Ich wollte, dass jedes Objekt seine eigenen Eingaben verarbeitet. Wenn ich es in der Screen-Instanz machen muss, dann sind keine InputProcessors in jedem Objekt notwendig, ich müsste sie vom Screen-Objekt aus steuern. – TimSim

+0

Entschuldigung, das habe ich nicht wirklich verstanden. – noone

+0

Ich verstehe dein Beispiel nicht. Was ist ein benutzerdefinierter Eingabeprozessor? – TimSim