当前位置: 首页 > 知识库问答 >
问题:

当按下多个键时,libGDX InputProcessor不能正常工作

田马鲁
2023-03-14

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

@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个答案

郭俊拔
2023-03-14

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

 类似资料:
  • 问题内容: 我有以下方法可以在Angular中捕获按键: 我听着 但是,我想检测何时同时按下两个键,例如和同时按下(不是一个一个又一个又一个的组合)。 最好的方法是什么? 编辑 我当时想的是: 因此,如果我有多个按键,那么我将创建正确的。但是,问题在于,现在顺序很重要(即,如果我按then ,则按is ;如果我按另一种方式按,则得到) 问题答案: 我认为广播使用过多。而是使用自定义指令?这是一个用

  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

  • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1

  • 正如标题所说,我想检测多个键盘键同时(同时)按下和正在(同时)按下一段时间。我试图在上添加多个事件处理程序,但不起作用: 但是,当用户同时按[]和[]并保持按下时,上面的两个操作必须同时发生,而不仅仅是其中一个。

  • 问题内容: 我需要设计一个有两个玩家的游戏。每个人都有一个球,应该能够左右移动球,第一个球员带有’a’‘d’按钮,第二个球员带有右,左箭头按钮。但是,当前一名球员需要等待另一名球员的动作完成才能移动自己的球。我该如何解决这个问题?这是我的代码的相关部分: 问题答案: 您需要使用一系列标志和某种“更新”循环来根据标志的状态来更新游戏的状态… 例如,首先创建一系列标志… 这些可以由单个播放器对象轻松维

  • 我正在做一个类似生存的游戏,我有两种类型的碰撞,一种是玩家的敌人,另一种是敌人身上的子弹。我也有一个健康栏,由于某些原因,在picbox被移除后,健康仍然下降,就像敌人与玩家互动一样。 这是子弹碰撞代码的一个块(所有8个方向的所有代码都是相同的) 这是敌方与玩家碰撞的暗号