gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:46 26 4
gpt4 key购买 nike

正如标题所示,在我的 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
}
}

为什么没有检测到空格键?如果我不检查空格键是否被按下,子弹会射得很好,但是当我检查空格键时,它只是检测不到它。

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

最佳答案

KeyEvent 仅为最后按下的键生成,因此您需要在按下某个键时跟踪该键(例如,将其添加到 HashMap),然后在 keyReleased 上,您需要从 HashMap 中删除该键。

更好的方法是使用Key Bindings(而不是KeyListener)将KeyStroke绑定(bind)到Action

查看 Motion Using the Keyboard 中的 KeyboardAnimation 示例。它解释了有关按键绑定(bind)的更多信息,并提供了处理上/下/右/左键的完整工作示例。一般来说,可以同时按住任意两个键来进行对角运动。

该逻辑也适用于 3 个键,但正如已经提到的,键盘本身可能不支持同时按下多个键。

关于Java KeyPressed - 如果其他键也被按下,则无法检测空格键是否被按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41201835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com