我有一个带有Thread,MouseListerner和MouseMotionListener的Java Applet。
当拖动鼠标时,在applet上绘制了一些内容,然后它就会掉下来。 这确实有效,但是当鼠标移动而未按下时,落下的物体不会流畅。
线程调用重绘函数
while(running){
repaint();
}
mouseMoved函数为空,mouseDragged调用repaint。 我希望有人知道这个问题,谢谢
答案 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");
}