2016-12-29 47 views
0

我有一個名爲AbstractGameScreen具有以下簽名類:Libgdx,如何捕捉返回鍵,當級是輸入處理器

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

我的屏幕擴展這個抽象類。現在我遇到的問題是,在使用階段的屏幕中,我已經將舞臺設置爲輸入處理器。但是,如果我這樣做,keyUp方法不會在按下後退鍵時執行。如果我將屏幕設置爲inputprocessor,則舞臺不起作用。我如何解決這個問題?

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

在這種情況下,你需要兩個InputProcessors-的Stage和你AbstractScreen。這樣做的方法是創建一個新的InputMultiplexer object並將其配置是這樣的:

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

它完全在大多數屏幕的類。只有在MenuScreen(上面的代碼)中,keyUp方法會執行兩次,這會導致應用程序退出。關於這是爲什麼的任何想法?在閱讀文檔以停止事件委派之後,我已經嘗試將返回值更改爲true。但是這並沒有奏效。 – Doflaminhgo

+0

好吧,沒關係。粘貼答案時,我不小心刪除了catchBackKey方法。它現在完美運作。謝謝! – Doflaminhgo