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

java游戏循环中未处理的时间,java,game-loop,Java,Game Loop,我在看notch的游戏循环,我不明白unprocessedTime变量的含义是什么 long now = System.nanoTime(); unprocessedTime += now - lastTime; lastTime = now; 如果有人能给我解释一下这两个变量之间的区别,我将不胜感激。谢谢 public void run() { requestFocus(); Image image = new BufferedImage(320, 240, Buffered

我在看notch的游戏循环,我不明白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();
        }
    }
}

这是以纳秒为单位计算上次触发事件之间的时间间隔

根据Java文档(如果您需要了解) System.nanoTime()

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


向我们展示完整的代码,但它似乎是所有循环的总时间。