对于图形,每隔一段时间 t 更新屏幕的最佳方法是什么?假设使用update()
调用更新方法,并且所有实际图形内容都在那里进行,并且已经处理完毕。
我已经使用了javax.swing.Timer,它会在指定的时间间隔内触发一个动作事件来运行我的更新方法,但是计算机的速度仍然是一个因素。所以如果我这样做是最好的方式(我怀疑)我如何将更新保留为时间专用?
答案 0 :(得分:0)
Java中的系统时钟调用不一定非常准确。这是在等待指定时间段时考虑更新时间的一种方法。
在这个例子中,我们每40毫秒或每秒25帧更新。
package com.ggl.testing;
public class TimerRunnable implements Runnable {
private static final long interval = 40L; // 40 milliseconds
@Override
public void run() {
long startTime = System.currentTimeMillis();
while (true) {
update();
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
elapsedTime = Math.max((interval - elapsedTime), 5L);
sleep(elapsedTime);
startTime = System.currentTimeMillis();
}
}
private void sleep(long interval) {
try {
Thread.sleep(interval);
} catch (InterruptedException e) {
}
}
private void update() {
}
}
我们看到执行更新方法需要多长时间。我们计算经过的时间,并确保间隔减去经过的时间不低于5毫秒。如果更新时间超过35毫秒,我们将降低帧速率以保持同步。