按间隔更新图形

时间:2015-11-02 18:34:34

标签: java graphics updates

对于图形,每隔一段时间 t 更新屏幕的最佳方法是什么?假设使用update()调用更新方法,并且所有实际图形内容都在那里进行,并且已经处理完毕。

我已经使用了javax.swing.Timer,它会在指定的时间间隔内触发一个动作事件来运行我的更新方法,但是计算机的速度仍然是一个因素。所以如果我这样做是最好的方式(我怀疑)我如何将更新保留为时间专用?

1 个答案:

答案 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毫秒,我们将降低帧速率以保持同步。