小编典典

Java KeyPressed-如果其他键也太旧,则无法检测是否按下了空格键

java

如标题所示,在我的Java游戏中,无法检测是否同时按下空格键和其他键。

例如,空格键是射击键,而箭头键则使玩家移动。如果我按下向上箭头键,向左箭头键和空格键,那么它应该向左上方发射子弹。

但是,在使用倍数System.out.println();进行调试之后,我发现如果按下两个键,则如果按下空格键,则不会检测到空格键。

public void keyPressed(KeyEvent e) {


if(e.getKeyCode() == 32){
    pressingSpacebar = true;
    System.out.println("Spacebar pressed true");
}


    // Up arrow key
    if(e.getKeyCode() == 38){
        up = true;
        System.out.println("Up = true");
    }
    // Down arrow key
    if(e.getKeyCode() == 40){
        down = true;
        System.out.println("Down = true");

    }
    // Right arrow key
    if(e.getKeyCode() == 39){
        right = true;
        System.out.println("Right = true");
    }
    // Left arrow key
    if(e.getKeyCode() == 37){
        left = true;
        System.out.println("Left = true");
    }
}

然后在keyReleased中:

public void keyReleased(KeyEvent e) {
    if(e.getKeyCode() == 38){
        up = false;
        repaint();
    }
    if(e.getKeyCode() == 40){
        down = false;
        repaint();
    }
    if(e.getKeyCode() == 39){
        right = false;
        repaint();
    }
    if(e.getKeyCode() == 37){
        left = false;
        repaint();
    }
    if(e.getKeyCode() == 32){
        pressingSpacebar = false;
    }
}

这是我检查是否按空格键和多个键的方式:

if(pressingSpacebar){
        if(right == true && down == true && up == false && left == false){
            // Shoot bullet
        }
}

为什么未检测到空格键?如果我不检查是否按下空格键,则子弹射击很好,但是当我检查空格键时,它不会检测到它。

注意:我已经阅读了与此问题类似的其他帖子,但答案不是很有帮助。当涉及到这些东西时,我是一个新手,所以请尝试给出一个简单的答案或进行一些解释。提前致谢!


阅读 340

收藏
2020-11-30

共1个答案

小编典典

KeyEvent仅针对最后按下的键生成,因此您需要在按下键时保持跟踪(例如,通过将其添加到HashMap),然后在keyReleased上需要从HashMap中删除键。

更好的方法是使用Key Bindings(而不是KeyListener)将绑定KeyStrokeAction

查看KeyboardAnimation使用键盘运动中找到的示例。它解释了有关键绑定的更多信息,并提供了处理上/下/右/左键的完整工作示例。通常,可以同时按住任意两个键以进行对角线运动。

该逻辑也可以使用3个键,但是正如已经提到的,键盘本身可能不支持一次按下那么多键。

2020-11-30