移动鼠标时,Java Applet会变慢

时间:2012-03-31 16:35:34

标签: java event-handling applet

我有一个带有Thread,MouseListerner和MouseMotionListener的Java Applet。

当拖动鼠标时,在applet上绘制了一些内容,然后它就会掉下来。 这确实有效,但是当鼠标移动而未按下时,落下的物体不会流畅。

线程调用重绘函数

while(running){
  repaint();
}

mouseMoved函数为空,mouseDragged调用repaint。 我希望有人知道这个问题,谢谢

1 个答案:

答案 0 :(得分:1)

您正在使用主线程占用CPU(不必要的)。由于您不需要每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");
}