我正在尝试使这个游戏涉及图像图标在屏幕上移动,具体取决于箭头键的输入。我开始使用Key Listeners,它运行良好,但为了避免将来出现焦点和可维护性问题,我决定尝试使用Key Bindings,因为每个人都建议使用Key Bindings而不是监听器。然而,我发现Key Listeners提供平滑,连续的移动,而键绑定产生锯齿状动画,您可以看到精灵在某个方向上从一个位置瞬间移动到给定的像素间隔。难道我做错了什么?我应该坚持听众吗?
我的密钥绑定代码(仅用于向右移动):
im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0, false), "right");
am = this.getActionMap();
am.put("right", new AbstractAction(){
public void actionPerformed(ActionEvent e)
{
if(x != 440)
{
x+=1;
repaint();
}
}
});
}
IIRC键绑定的行为就像您键入文本字段时一样。具体来说,我的意思是,如果您按住一个按钮(在这种情况下,右箭头键),它将发送一次按键,并在一两秒后开始快速发送按键。这就是为什么你会得到不稳定的运动,游戏循环比调用绑定更频繁地运行。
这就是为什么每次运行主循环时用监听器轮询密钥更好的原因,因为动画只会像循环本身一样变得不稳定。如果那个循环变得不稳定,游戏就会完全缓慢地运行。