android - catchbackkey 不工作 (libgdx) Android

标签 android libgdx

我正在尝试使用 Android 设备上的后退键来为我的游戏设置屏幕......但它似乎不起作用...... 我在网上看了一些帖子 n 做了这个......

在菜单屏幕中,如果按下后退键,应用程序应该退出......但是没有触发任何 Action ......即使我多次按下后退键也没有触发任何 Action ......

public class MenuScreen extends AbstractScreen implements InputProcessor  {

@Override
   public void show()
   {
      Gdx.input.setInputProcessor(this);
      Gdx.input.setCatchBackKey(true);
      Gdx.input.setCatchMenuKey(true);

}


   @Override
   public boolean keyDown(int keycode) {
      // TODO Auto-generated method stub
        if(keycode == Keys.BACK)
        { 
             Gdx.app.exit();
          }

      return false;
   }

在 LevelScreen 中,当按下后退键时,屏幕应设置为 menuscreen ,但我的应用程序将退出 有没有办法禁用后退键??按下后退键应该什么都不会发生?

  public class LevelScreen extends AbstractScreen  implements InputProcessor {

@Override
   public void show()
   {
      Gdx.input.setInputProcessor(this);
      Gdx.input.setCatchBackKey(true);
      Gdx.input.setCatchMenuKey(true);

}

@Override
   public boolean keyDown(int keycode) {
      if(keycode == Keys.BACK)
      {
                game.setScreen(game.geMenuScreen());
           }
      // TODO Auto-generated method stub
      return false;
   }

最佳答案

首先,您可能希望在输入处理器中将其从使用 keyDown() 更改为 keyUp()。 keyUp() 只会在用户释放按键时调用一次,但 keyDown() 会在后退键按下的每一帧调用(大约每秒 60 次)。因此,您的应用可以切换屏幕并在 2 帧内关闭您,这可能不是您想要的。

这可能就是您在关卡屏幕上看到应用程序关闭的原因。它将进入 LevelScreen -> ScoreScreen -> MenuScreen,然后在 3 帧(大约 50 毫秒)后退出。以下是在 ScoreScreen 中启动的应用程序的一些示例代码。当用户按下(并释放)后退按钮时,返回菜单屏幕。接下来,当他们再次按下(并释放)后退按钮时,它会关闭应用程序。

您需要根据您的游戏调整此代码,但这应该能让您有所了解和使用。 (注意:我已验证此功能适用于 Android 2.3.3 和 LibGDX 0.9.8)

public class BackTest extends Game {
    public Screen menu;
    public Screen score;

    @Override public void create() {
        Gdx.input.setCatchBackKey(true);
        this.menu = new MenuScreen(this);
        this.score = new ScoreScreen(this);
        this.setScreen(this.score);
    }

    public static abstract class AbstractScreen implements Screen {
        @Override public void render(final float delta) {}
        @Override public void resize(final int width, final int height) {}
        @Override public void show() {}
        @Override public void hide() {}
        @Override public void pause() {}
        @Override public void resume() {}
        @Override public void dispose() {}
    }

    public static class MenuScreen extends AbstractScreen {
        public final BackTest game;

        public MenuScreen(final BackTest game) {
            this.game = game;
        }

        @Override public void show() {
            Gdx.app.log("Menu", "Show");
            Gdx.input.setInputProcessor(new InputAdapter() {
                @Override public boolean keyUp(final int keycode) {
                    if (keycode == Keys.BACK) {
                        Gdx.app.log("Menu", "Quit");
                        Gdx.app.exit();
                    }
                    return false;
                }
            });
        }
    }

    public static class ScoreScreen extends AbstractScreen {
        public final BackTest game;

        public ScoreScreen(final BackTest game) {
            this.game = game;
        }

        @Override public void show() {
            Gdx.app.log("Score", "Show");
            Gdx.input.setInputProcessor(new InputAdapter() {
                @Override public boolean keyUp(final int keycode) {
                    if (keycode == Keys.BACK) {
                        Gdx.app.log("Score", "Back");
                        ScoreScreen.this.game.setScreen(ScoreScreen.this.game.menu);
                    }
                    return false;
                }
            });
        }
    }
}

关于android - catchbackkey 不工作 (libgdx) Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15719936/

相关文章:

java - 膨胀类 fragment 时出错

android - 自定义 Dialog 中的动态自定义 ListView

java - libGDX 将目录中的所有图像循环加载到 AssetManager 中需要很长时间

java - 多边形无法正确旋转

java - MaterialDatePicker android选择指定日期之前而不是指定日期

android - 如何在 Eclipse 中添加字符串资源?

android - 如何在 Android 中使用正则表达式

java - 阶段中的 LibGDX Actor 未收到点击事件

java - 玩家移动方向逻辑

java - 如何在方法中加入 2 个变量的名称?