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

Java 如何在Libgdx中管理具有多个屏幕的后退按钮?,java,libgdx,back,Java,Libgdx,Back,如果有办法管理Libgdx中的后退按钮 例如,在Andengine中,我实现了如下内容: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { switch (currentScen

如果有办法管理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只有创建、显示、渲染。。。 我试着这样做:

if (Gdx.input.isButtonPressed(Keys.BACK)){
    new ScreenChangeTask(MyScreen.SPLASH);
}
但它仍然关闭了我的应用程序


仅供参考:我有
类控制器扩展游戏
,我使用
公共无效设置屏幕(屏幕屏幕)
在屏幕之间切换。

为了正确执行此操作,您需要告诉LibGDX抓住后退键:

Gdx.input.setCatchBackKey(true);
您应该在应用程序的早期某处执行此操作。当您希望用户能够使用back键时,将其设置为false。

set

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

希望这将对您有所帮助

将其设置为false的另一种方法是在您确实希望允许用户退出时调用Gdx.app.exit()。谢谢,这很有帮助。但我还有一个问题:
if(Gdx.input.isKeyPressed(Keys.BACK)){System.out.println(“BACK键被按下”);new Timer().schedule(new ScreenChangeTask(MyScreen.SOME_SCREEN),1);
-我把这段代码放在render方法中。当我按下“后退”按钮时,它会切换回另一个尖叫,在那个屏幕上它会切换回另一个,因为这种代码的平静会被触发好几次,直到我移开手指。如何解决这个问题?您只需在if语句中使用一个布尔变量,然后在按下键时将布尔值设置为false,这样下次游戏循环就不会进入它。非常感谢。还可以使用静态方法计算上次单击和当前单击之间的时间差(返回布尔值),例如,如果超过0.5秒,则可以单击,否则不能。