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

问题描述:

我正在查看notch的游戏循环,我无法理解unprocessedTime变量的含义是什么。Java游戏循环中的未处理时间

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

我会很感激,如果有人可以解释我的两个variables.Thanks

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(); 
     } 
    } 
} 
+0

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

之间这accumnulating在最近一次事件被触发之间纳秒经过时间的差别..

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

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