2016-12-29 4 views
0

あるとき、私は次のシグネチャでAbstractGameScreenというクラスを持っている:Libgdx、ステージは入力プロセッサ

public abstract class AbstractGameScreen extends InputAdapter implements Screen { ... } 

はすべての私の画面は、この抽象クラスを拡張します。今私が遭遇している問題は、ステージを使用するスクリーンでは、ステージがすでに入力プロセッサーに設定されていることです。しかし、そうすると、keyUpメソッドは、バックキーが押されても実行されません。代わりに画面を入力プロセッサに設定すると、ステージが機能しません。どうすればこの問題を回避できますか?あなたがStageとあなたのAbstractScreen InputProcessors- 2を必要とする。この場合

public class MenuScreen extends AbstractGameScreen { 

@Override 
    public void show() { 
     stage = new Stage(new StretchViewport(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT)); 
     Gdx.input.setInputProcessor(stage); 
     Gdx.input.setCatchBackKey(true); 
     instructionsVisible= false; 
     rebuildStage(); 
    } 

@Override 
    public boolean keyUp (int keycode) { 
     // Back to Menu 
     if (keycode == Input.Keys.ESCAPE || (keycode == Input.Keys.BACK && instructionsVisible)) { 
      instructionsVisible=false; 
      layerInstruction.setVisible(false); 
      layerControls.setVisible(true); 
     } 
     else 
     { 
      Gdx.app.exit(); 
     } 
     return false; 
    } 

答えて

1

。これを行う方法は、新しいInputMultiplexer objectを作成し、次のように構成します。

InputMultiplexer multiplexer = new InputMultiplexer(); 
multiplexer.addProcessor(stage); 
multiplexer.addProcessor(this); // Your screen 
Gdx.input.setInputProcessor(multiplexer); 
+0

ほとんどの画面クラスで完全に機能します。 MenuScreen(上のコード)でのみ、keyUpメソッドが2回実行されるため、アプリが終了します。それはなぜですか?私はすでに、イベントの委任を止めるためにドキュメントを読んだ後で戻り値をtrueに変更しようとしました。しかし、これはうまくいかなかった。 – Doflaminhgo

+0

いいえ、気にしないでください。私は誤ってあなたの答えを貼り付けるときにcatchBackKeyメソッドを削除しました。それは今完璧に動作します。ありがとうございました! – Doflaminhgo

関連する問題