【问题标题】:Key input not moving image smoothly按键输入不流畅
【发布时间】:2013-08-31 22:23:09
【问题描述】:

按键输入有​​效,但同时按下两个以上按键时会有延迟。切换方向时也有 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){
            }
        }
    }
}`

【问题讨论】:

  • 旁注:考虑使用 Key Bindings 而不是 KeyListener
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java image swing keylistener


【解决方案1】:

基本上你需要在按键被按下时升起一个标志并在它被释放时重置它。

然后,在您的主游戏循环中,您需要检查设置了哪些标志并采取适当的措施。这将使您无需担心关键事件之间的固有延迟,这在不同平台上可能会有所不同。

例如,请参阅Problems with Java's Paint method, ridiculous refresh velocity

这允许游戏对象根据加速键在一小段时间内加速(和减速)。

此外,正如已经建议的那样,您应该避免使用KeyListener 并使用Key Bindings,主要是因为您会遇到KeyListerner 的焦点问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多