在libgdx中,如何获取返回按钮的输入?

48

我希望在我的游戏中,按下 Android 系统的返回键时能够跳转到暂停菜单,而不是最小化游戏。根据我查找到的资料,我知道需要调用以下方法:

Gdx.input.setCatchBackKey(true);

但我该如何检测按钮按下?input.isKeyDown(Keys.BACK)似乎没有任何反应。

4个回答

78

我是这样解决问题的:

public class MyApplication implements ApplicationListener, InputProcessor {
   // !! Remember to override all other required methods !!
   ...

   @Override
   public void create() {
        Gdx.input.setInputProcessor(this);
        Gdx.input.setCatchBackKey(true);
        // rest of your stuff...
   }

   ...

   @Override
   public boolean keyDown(int keycode) {
        if(keycode == Keys.BACK){
           // Do your optional back button handling (show pause menu?)
        }
        return false;
   }

   ...
}

希望这个不是复制黏贴的内容,但愿能对你有所帮助。:)


1
我宁愿在我的Screen类中完成这个操作,这样我就可以更精细地控制。 - Anuj
2
如果您想在屏幕上处理它,可以参考以下链接: http://gamedev.stackexchange.com/questions/114972/handling-back-button-in-android-without-implementing-inputprocessor/114985#114985 - kingAm
3
2022 年使用:Gdx.input.setCatchKey(Input.Keys.BACK, true) - Владислав Шестернин

31
你可以使用Gdx.input.isKeyPressed方法。
if (Gdx.input.isKeyPressed(Keys.BACK)){
  // Do something
}

这是救命稻草。奇怪的是,当InputProcessor类用于检测桌面设备的键盘时,它为后退“按钮”获取事件。更合理的做法是在GestureListener类中获取此事件。更不用说您只能设置一个InputProcessor了。 - MilanG
2
@MilanG,您可以使用多路复用器设置多个输入处理器,请参见此处的示例:https://dev59.com/cmw05IYBdhLWcg3weBru#20048019 - codeulike
如果您想在屏幕上处理它,可以参考以下链接: http://gamedev.stackexchange.com/questions/114972/handling-back-button-in-android-without-implementing-inputprocessor/114985#114985 - kingAm
请确保使用isKeyJustPressed而不是isKeyPressed。在我的安卓设备上尝试时,后者有时会注册两次,这可能是不可取的。 - Keenan Thompson

21

首先创建一个InputProcessor来处理返回键操作,然后将其添加到复合器中,以便其他组件仍然接收类似的事件。

      InputProcessor backProcessor = new InputAdapter() {
            @Override
            public boolean keyDown(int keycode) {

                if ((keycode == Keys.ESCAPE) || (keycode == Keys.BACK) )

                // Maybe perform other operations before exiting
                Gdx.app.exit();
                return false;
            }
        };


        InputMultiplexer multiplexer = new InputMultiplexer(mStage,
                backProcessor);
        Gdx.input.setInputProcessor(multiplexer);


并启用捕获返回键。

Gdx.input.setCatchBackKey(true);


就这些内容。祝好运!


2
您可以使用 Gdx.input.isKeyPressed(Keys.BACK),但如果您不希望 Activity 关闭,可以按如下处理:
Gdx.input.setCatchBackKey(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接