按下多个键时,libGDX InputProcessor无法正常工作

时间:2014-09-20 02:18:43

标签: java event-handling libgdx keypress

我有一个实现libGDX InputProcessor的类InputHandler。它用于处理箭头键和空格键事件。

keyDown和keyUp方法:

@Override
public boolean keyDown(int keycode) {

    switch (keycode) {
        case Keys.SPACE:
            gameWorld.setSpacePressed(true);
            break;
        case Keys.LEFT:
            gameWorld.setLeftPressed(true);
            break;
        case Keys.RIGHT:
            gameWorld.setRightPressed(true);
            break;
        case Keys.UP:
            gameWorld.setUpPressed(true);
            break;
        case Keys.DOWN:
            gameWorld.setDownPressed(true);
            break;
        default:
    }
    return true;
}

@Override
public boolean keyUp(int keycode) {

    switch (keycode) {
        case Keys.SPACE:
            gameWorld.setSpacePressed(false);
            break;
        case Keys.LEFT:
            gameWorld.setLeftPressed(false);
            break;
        case Keys.RIGHT:
            gameWorld.setRightPressed(false);
            break;
        case Keys.UP:
            gameWorld.setUpPressed(false);
            break;
        case Keys.DOWN:
            gameWorld.setDownPressed(false);
            break;
        default:
    }
    return true;
}

我的问题是如果按下所有三个向上箭头,向左箭头和空格键,则最后一个按下不会触发事件。但是,向右和向下箭头键功能完美。

示例:

  • 左箭头+空格键:触发setLeftPressed和setSpacePressed。
  • 左箭头+向上箭头+空格键:未触发setSpacePressed。
  • 右箭头+向上箭头+空格键:全部三个都被触发。
  • 左箭头+向上箭头+向下箭头:全部三个都被触发。
  • 向上箭头+空格键:触发setUpPressed和setSpacePressed。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这可能不是因为您的代码或Libgdx,它可能是键盘的问题。有时,在大多数普通键盘中,如果它们靠近在一起,则一次按下3个(或更多)键将不起作用。这种现象称为keyboard ghosting。我注意到,与其他组合相比,不适合你的按键相对更近(物理距离)。 尝试在提供的链接中使用相同的组合,并尝试使用其他键盘/机器来测试该代码。如果问题出在您的键盘上,您可能需要考虑让代码支持变量键定义,而不是使用类似键盘的任何人使用硬编码键。