2012-03-31 32 views
0

我有一个包含Thread,MouseListerner和MouseMotionListener的Java Applet。Java Applet在移动鼠标时速度变慢

拖动鼠标时,在小应用程序上绘制一些东西,然后落下。 这确实有效,但是当鼠标移动而没有按下时,落下的物体不会流利地移动。

线程调用重绘功能

while(running){ 
    repaint(); 
} 

的的mouseMoved函数是空的,来电的mouseDragged重绘。 我希望有人知道这个问题,谢谢

+1

1)'而(运行){重绘(); }'不要在没有'wait()'的情况下做到这一点2)为了更好地帮助,请发布[SSCCE](http://sscce.org/)。 3)这个千年,使用Swing而不是AWT组件。 4)这可能应该是使用[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)(而不是嵌入式小程序,这很棘手)从链接启动的框架。 – 2012-03-31 16:41:49

回答

1

你正在占用你的主线程的CPU(unnecesaruly)。既然你不需要更新速度加快,每40毫秒,可能每80就足够了,你应该返工你的主循环是这样的:

/** 
* internal game loop method. 
*/ 
public void updateGameState() { 
    lastFrameTime = System.currentTimeMillis(); 

    // as long as we run we move 
    while (state == GameState.RUNNING) { 
     currentFrame++; 
     timeNow = System.currentTimeMillis(); 

     // sleep until this frame is scheduled 
     long l = lastFrameTime + FRAME_DELAY - timeNow; 
     updatePositions(); 
     redraw(); 
     //System.err.println("............. delay:" + l); 
     if (l > 0L) { 
      try { 
       Thread.sleep(l); 
      } 
      catch (Exception exception) { 
      } 
     } else { 
      // something long kept us from updating, reset delays 
      lastFrameTime = timeNow; 
      l = FRAME_DELAY; 
     } 

     //System.err.println("lft: " + lastFrameTime + " tn: " + timeNow); 
     lastFrameTime = timeNow + l; 
     // be polite, let others play 
     Thread.yield(); 
    } 
    ///System.err.println("leave game loop"); 
} 
+0

谢谢你的回答,我会尽力实施它们 – user1305241 2012-04-01 10:03:52

相关问题