【问题标题】:libgdx desktop project is catching the back keylibgdx 桌面项目正在捕获后退键
【发布时间】:2014-03-10 14:23:16
【问题描述】:

我正在使用 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) 部分始终为真。

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

从我用 libgdx 搜索的内容来看,我认为 BACK 键是专门用于 android 的,并且没有用于 PC 的等效按钮。

我知道我可以很容易地修改代码,所以桌面版本只能捕获退出按钮,但我更感兴趣的是为什么会发生这种情况。

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

【问题讨论】:

    标签: java android libgdx desktop


    【解决方案1】:

    看起来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 键之一?)所以这可能不相关。但您似乎应该坚持只在相关平台上检查特定于平台的密钥(因为不能保证该密钥不是其他平台上的其他东西)。

    【讨论】:

      【解决方案2】:

      在您的情况下,查找 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2019-06-22
        相关资源
        最近更新 更多