libgdx桌面项目正在抓住后退键

时间:2014-03-10 14:23:17

标签: java android libgdx desktop

我正在使用libgdx制作游戏。在游戏的android构建中,我想抓住后退键并暂停游戏。在桌面版本中,我想抓住转义键暂停游戏。

我在之前的游戏中通过在基础项目中捕获转义键和后退键来完成此操作(没有特定于平台的代码)。因此,相关代码的显示效果不多:

Gdx.input.setInputProcessor(mStage);
Gdx.input.setCatchBackKey(true);
if(Gdx.input.isKeyPressed(Keys.BACK) || Gdx.input.isKeyPressed(Keys.ESCAPE) )
{
    mPaused = true;
}

我遇到的问题是我的游戏的桌面版似乎有时会被暂停。在遇到上述情况时设置断点我发现条件的Gdx.input.isKeyPressed(Keys.BACK)部分始终为真。

起初我以为它只是在我按下逃生时发生,但似乎我可以按任意键,它最终会导致BACK按钮卡住(即它不会卡在第一次按下但是在10-15次按键后,按任意键,它会卡住)。

从我用libgdx搜索到的内容,我认为BACK键是专门针对Android而且没有相应的PC按钮。

我知道我可以轻松修改代码,因此桌面版只能捕获转义按钮,但我更感兴趣的是为什么会发生这种情况。

什么可以导致libgdx在PC上捕获BACK键?

2 个答案:

答案 0 :(得分:0)

看起来BACKMETA_SYM_ON都具有相同的密钥代码(4)。请参阅http://libgdx.badlogicgames.com/nightlies/docs/api/constant-values.html#com.badlogic.gdx.Input.Keys.BACK

我不确定这些数字来自何处,但我怀疑它们来自底层平台(Android或LWJGL),因此重叠可能是不可避免的。

我不确定META_SYM_ON对应哪一个(ALT键之一?)所以这可能不相关。但看起来您应该坚持只在相关平台上检查特定于平台的密钥(因为无法保证该密钥不是另一个平台上的其他密钥)。

答案 1 :(得分:0)

在您的情况下,查找keyDown事件而不是检查每个帧的某个键的状态会好得多。试试这个方法:

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

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

                // Some code

            return false;
        }
    };

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