2016-04-06 17 views
3

Ich entwickle Android-Spiel mit LibGdx; im moment gibt es 2 menü-bildschirme mit mehreren tasten, ein mainMenu und ein gameOverMenu. Ich brauche Gdx.input.setInputProcessor (stage); in beiden Klassen, aber ich kann nicht ... Es funktioniert nur ein Bildschirm.LibGdx: Verwenden von setInputProcessor (Bühne) in verschiedenen Klassen

ich viel auf dem Forum suchen und ich fand nur Gdx.input.setInputProcessor (inputMultiplexer) ...

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

ich Probleme mit ihm haben werde, weil es um verwendet wird mehrere Prozessor zu haben, in die selbe Klasse.

Aber ich brauche nur 1 Prozessor in zwei separaten Klassen.

Im Moment habe ich diese ... Aber es funktioniert nicht:

KLASSE 1 Gdx.input.setInputProcessor(stageMainMenu);

KLASSE 2 Gdx.input.setInputProcessor(stageGameOverMenu);

EDIT: @MennoGouw die Problem, mit dem, was ich zitiere, ist, dass ich Stage-Objekt in addProcessor, nicht InputProcessor setzen möchte. Ich möchte meinen eigenen Prozessor nicht erstellen, ich würde ClickListener verwenden. Außerdem brauche ich nicht wirklich beide Prozessoren gleichzeitig zu verwenden. Tatsächlich sind dies zwei verschiedene Bildschirme. Es gibt jedoch keine klare Methode für InputProcessor.

Außerdem weiß ich nicht, wo ich InputMultiplexer bauen sollte.

Ich werde versuchen, mehr klar zu sein, ich habe: MyGame.java mit nur einer Methode ( public void create() { mainMenuScreen = new MainMenu(this); //gameScreen = new MainGame(this); gameOverScreen = new GameOver(this); setScreen(mainMenuScreen);
}
)

Und GameOver.java & MainMenu.java. (die zwei Bildschirme) Wenn ich Gdx.input.setInputProcessor(stageName) in den Konstruktor einfüge, wird nur einer der beiden ausgeführt. Sonst stürzt es in der show() -Methode ab.

Vielen Dank für Ihre Zeit

+0

Wenn Sie beide Prozessoren gleichzeitig arbeiten möchten, sollten Sie die 'InputMultiplexer' verwenden, wie Sie in Ihrem Code tun. Wenn Sie nur einen aktiven benötigen, können Sie 'inputMultiplexer.clear' eingeben und jederzeit einen neuen hinzufügen. – Madmenyo

+0

Bitte zeigen Sie Ihre Aufrufe von setInputProcessor im Kontext. Sie sollten diese wahrscheinlich in den entsprechenden show() Methoden aufrufen. Sie benötigen dafür keinen Multiplexer, da sich die Stufen auf unterschiedlichen Bildschirmen befinden. – Tenfour04

+0

@ Tenfour04 Aber wenn ich nur InputProcessor in der Methode show() verwende, funktioniert es einmal. (Ich kann das Spiel starten, aber wenn ich auf dem GameOver-Bildschirm bin, wenn ich auf eine Schaltfläche klicke, stürzt es ab) – SkR

Antwort

1

Was mit InputMultiplexer das Problem ist? Es ist gemacht für was Sie suchen.

Sie auch dieses Stück Code verwenden könnten jeweils die Verarbeitern in jeder Stufe hinzuzufügen:

Erster Setup-Multiplexer in Ihrer init Spielklasse Funktion:

Gdx.input.setInputProcessor(new InputMultiplexer()); 

Und später, wenn Sie hinzufügen müssen Ihre Eingangsprozessor:

InputMultiplexer inputMultiplexer = (InputMultiplexer) Gdx.input.getInputProcessor(); 
if (!inputMultiplexer.getProcessors().contains(stageMainMenu)) 
    inputMultiplexer.addProcessor(stageMainMenu);