如何在Libgdx中管理多个屏幕的后退按钮?

问题描述:

如果在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)在屏幕之间切换。

为了做到这一点,你还是应该告诉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

设置

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; 
     } 
    } 
    } 

希望这将帮助你