【发布时间】:2011-07-18 10:41:24
【问题描述】:
对于游戏,我使用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%。但有时(经常),keyReleased 没有被调用,当释放键时(导致游戏角色继续向右移动 - 再次按下键可以解决问题)。
[也许相关:]我使用 OSX 10.6,我经常同时按下多个键。
我怎样才能使这项工作 100% ?
【问题讨论】:
-
我怀疑发生了乱序事件(即您在按下快速按键之前获得释放)。你能数一数事件的数量,看看你获得的发布数量是否与新闻发布数量相同?
-
@Alexander:我会试着找出答案。我该如何解决?
-
为每个键保留一个计数器,当您收到按下事件时递增,当您获得释放时递减。当 count 0 或 >0 时考虑按下键,具体取决于您希望代码的行为方式(将无序视为有序,或忽略无序)。如果你不关心它们,你也可以过滤掉快速按下。
标签: java swing keylistener