【发布时间】:2012-06-09 19:03:52
【问题描述】:
我正在使用 Java Swing 创建一个简单的游戏。我有一个问题 - KeyListener 的反应似乎有点不稳定/缓慢。角色使用以下代码移动:
// player control
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key){
case(KeyEvent.VK_LEFT): dx = -speed; break;
case(KeyEvent.VK_RIGHT): dx = speed; break;
case(KeyEvent.VK_UP): dy = -speed; break;
case(KeyEvent.VK_DOWN): dy = speed; break;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key){
case(KeyEvent.VK_LEFT): dx = 0; break;
case(KeyEvent.VK_RIGHT): dx = 0; break;
case(KeyEvent.VK_UP): dy = 0; break;
case(KeyEvent.VK_DOWN): dy = 0; break;
}
}
// this method is performed each time before redrawing the screen
public void step() {
x += dx;
y += dy;
}
大多数时候一切都很好,但有时角色会在对键盘做出反应之前停止一段时间。如何让键盘输入更流畅?
【问题讨论】:
-
可能是“键重复速度”。您是否考虑过使用键绑定?
-
这根本不是真的,反应慢???,肯定有一个问题==取决于你的代码......(同样将使用
KeyBinding),对于使用SSCCE 更好地帮助您尽快编辑您的问题 -
实际上在阅读了有关键绑定的信息后,它们的工作方式似乎与
KeyListener相同,我还想知道是否可以在 KeyPressed 事件被触发后“退出”它,所以它不会重复 -
从键盘到
KeyListener的正确输出与KeyBindings相同,但相似之处已经结束,接下来的一切都是关于Focus和FocusSubsystem,KeyBindings没有不管是不是,你永远无法解决这个问题,KeyListener是最重要的,主要问题和取决于......,直到你包括使用 SSCCE 编辑你的帖子,以获得更好的帮助来检查通过鼠标点击发布到keylistener -
使用 Swing Timer 延迟来自任何 Listener 的事件没有问题,
标签: java swing awt keylistener