2013-03-14 64 views
6

如果在Libgdx中如何管理後退按鈕?如何在Libgdx中管理多個屏幕的後退按鈕?

例如Andengine我已經實現了這個這樣的:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {   
      switch (currentScene) { 
       case SPLASH: 
        break; 
       case MENU: 
        Process.killProcess(Process.myPid()); 
        break; 
       case WORLDMENU: 
         start(MENU); 
         break; 
... 
... 
    } 
    } 
} 

我不知道怎麼在這裏做,因爲ApplicationListener只創造,展示,渲染...... 我tryed這:

if (Gdx.input.isButtonPressed(Keys.BACK)){ 
    new ScreenChangeTask(MyScreen.SPLASH); 
} 

但它仍然關閉我的應用程序。

供參考:我有class Controller extends Game和我使用public void setScreen (Screen screen)在屏幕之間切換。

回答

9

爲了做到這一點,你還是應該告訴LibGDX趕返回鍵:

Gdx.input.setCatchBackKey(true); 

你應該在應用初期做到這一點的地方。當你希望用戶能夠使用後退鍵時,將其設置爲false。

+2

的替代方法將它設置爲false是剛剛打電話Gdx.app .exit()當你真的想讓用戶退出。 – 2013-03-14 21:36:54

+0

謝謝,這很有幫助。但我還有一個問題:'if(Gdx.input.isKeyPressed(Keys.BACK)){System.out.println(「Back key was pressed」); (),新的ScreenChangeTask(MyScreen.SOME_SCREEN),1); \t \t}' - 我把這段代碼放在渲染方法中。當我按下Back按鈕時,它會切換回另一個屏幕,然後在該屏幕中切換回另一個屏幕,因爲代碼的和平性會觸發多次,直到我移開手指。我該如何解決這個問題? – Aleksandrs 2013-03-15 09:49:46

+0

您只需在if語句中使用布爾變量,然後將布爾值設置爲false,如果按下該鍵,則下一個遊戲循環不會輸入它。 – Jyro117 2013-03-15 17:28:27

1

設置

Gdx.input.setCatchBackKey(true); 

然後再執行下面的代碼使用keyUp ...

@Override 
     public boolean keyUp(int keycode) { 
      if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {   
       switch (currentScene) { 
        case SPLASH: 
         break; 
        case MENU: 
         Process.killProcess(Process.myPid()); 
         break; 
        case WORLDMENU: 
          game.setScreen(new MenuScreen(game)); //MenuScreen is your class Screen 
          break; 
      return false; 
     } 
    } 
    } 

希望這將幫助你