【发布时间】:2017-05-03 06:42:46
【问题描述】:
正如标题所示,在我的 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
}
}
为什么没有检测到空格键?如果我不检查空格键是否被按下,子弹会很好地射击,但是当我检查空格键时它就不会检测到它。
注意:我已阅读与此问题类似的其他帖子,但答案不是很有帮助。当谈到这些东西时,我是一个新手,所以试着给出一个简单的答案或解释一下。提前致谢!
【问题讨论】:
-
GoldenBolt 是对的,这是复制品。如果您有两个 KeyPressed 事件而没有 KeyReleased 事件,则同时按下两个键。
-
您测试过键盘本身吗?尽管按下了多个键,但一些低端键盘将仅输出一个键码。如果您不知道是否会出现这种情况,我建议您先检查一下。
-
@walen 是的,我刚刚看到了,我会尝试一下并告诉你。
标签: java keylistener