java游戏循环中未处理的时间

时间:2016-03-06 15:31:48

标签: java game-loop

我正在查看缺口的游戏循环,我无法理解unprocessedTime变量的含义。

long now = System.nanoTime();
unprocessedTime += now - lastTime;
lastTime = now;

如果有人能解释我两个变量之间的区别,我将非常感激。谢谢

public void run() {
    requestFocus();
    Image image = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);
    setScreen(new TitleScreen(this));

    long lastTime = System.nanoTime();
    long unprocessedTime = 0;

   [b] try {
        Thread.sleep(500);
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }[/b]

    while (running) {
        Graphics g = image.getGraphics();

        long now = System.nanoTime();
        unprocessedTime += now - lastTime;
        lastTime = now;

        int max = 10;
        [b]while (unprocessedTime > 0) {
            unprocessedTime -= 1000000000 / 60;
            fps = unprocessedTime;
            screen.update(input);
            input.update();
            if (max-- == 0) {
                unprocessedTime = 0;
                break;
            }
        }[/b]
        screen.render(g);
        g.dispose();

        try {
            started = true;
            g = getGraphics();
            g.drawImage(image, 0, 0, GAME_WIDTH * SCREEN_SCALE, GAME_HEIGHT * SCREEN_SCALE, 0, 0, GAME_WIDTH, GAME_HEIGHT, null);
            g.dispose();
        } catch (Throwable e) {
        }
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是累计上次触发事件之间的失效时间(以纳秒为单位)......

根据Java Doc(如果您需要了解nanoTime)     System.nanoTime();

  

返回最精确的可用系统计时器的当前值,   以纳秒为单位。此方法只能用于测量经过的时间   并且与系统或挂钟时间的任何其他概念无关。   返回的值表示纳秒,因为一些固定但是   任意时间(也许在将来,所以价值可能是负面的)。   该方法提供纳秒精度,但不一定   纳秒精度。不保证频率如何   价值观改变。连续调用的差异跨越大于   大约292年(263纳秒)将无法准确计算   数值溢出导致的经过时间。