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

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

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

注意:我已阅读与此问题类似的其他post,但答案并不是很有帮助。 对于这些东西,我是一个新手,所以尽量给出一个简单的答案或解释一下。 提前致谢!

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

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

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

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

我遇到过类似的问题。 我发现无法保证同时按下按键并按住它们会为每个按键多次触发按键事件。 因此,如果您依赖于此,您需要牢记这一点。

我认为你应该在一个结构中尝试所有条件。

试试吧 –

 if(pressingSpacebar && right && down && !up && !left){ // Shoot bullet }