对于游戏,我使用KeyListener
来了解何时按下某个键。
public synchronized void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
keyRightIsDown = true;
}
}
public synchronized void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
keyRightIsDown = false;
}
}
这有效率为99.9%。但是不时(通常足够),当释放键时({1}}没有被调用(导致游戏角色继续向右移动 - 再次按下该键可以解决问题)。
[也许相关:]我使用OSX 10.6并且经常安静地按下多个键。
如何100%完成这项工作?
答案 0 :(得分:1)
可能会更好地了解KeyBindings,可以轻松地为关键操作构建Listener
KeyListener
答案 1 :(得分:1)
类似的问题被多次询问,看看
how-to-know-when-a-user-has-really-released-a-key-in-java
或
how-to-stop-repeated-keypressed-keyreleased-events-in-swing
我希望这会有所帮助;
编辑:
你可以做的是使用轮询机制:
static Toolkit kit = Toolkit.getDefaultToolkit();
..
if (kit.getLockingKeyState(KeyEvent.VK_X))
..
这意味着如果按下某个键,您总是检查线程。 但请记住,投票效率不高。