键输入有效但是一次按下两个以上键时会出现延迟。切换方向时还有1秒的延迟。我想知道如何解决这个问题?
public void keyPressed( KeyEvent ke )
{
switch(ke.getKeyCode()) {
case KeyEvent.VK_DOWN: spaceship.ypos+=12; break;
case KeyEvent.VK_UP: spaceship.ypos-=12; break;
case KeyEvent.VK_LEFT: spaceship.xpos-=12; break;
case KeyEvent.VK_RIGHT: spaceship.xpos+=12; break;
}
repaint();
}
如果需要更多代码来理解我在说什么,我可以添加更多。\
编辑:我通过添加一个主要类来修复我的问题,该主题类不断检查布尔值是否处于活动状态,因此没有延迟。
public class MainLoop implements Runnable{
public MainLoop(){
}
public void run(){
while(true){
if(up){ spaceship.ypos-=8; }
if(down){ spaceship.ypos+=8; }
if(left){ spaceship.xpos-=8; }
if(right){ spaceship.xpos+=8; }
repaint();
try {
Thread.sleep(20);
}
catch (InterruptedException ex){
}
}
}
}`
答案 0 :(得分:2)
基本上你需要在按下键时抬起一个标志,并在释放时重置它。
然后,在主游戏循环中,您需要检查设置了哪些标志并采取适当的操作。这将使您无需担心关键事件之间的固有延迟,这些事件在不同平台上可能会有所不同。
有关示例,请参阅Problems with Java's Paint method, ridiculous refresh velocity。
这允许游戏对象基于加速键在一小段时间内加速(和减速)。
另外,正如已经建议的那样,您应该避免使用KeyListener
并使用Key Bindings,主要是因为您会遇到KeyListerner
的焦点问题