2013-10-16 99 views
0

我曾帮助制作我的FPS跟踪器,但我不明白为什么我必须在打印fps后添加previousTime += 1000;。如果有人知道告诉我。另外如果你知道他为什么添加渲染两次,请解释一下。这里是我的代码:为什么我在我的FPS(帧每秒)跟踪器中添加时间? (Java)

public void run() 
{ 
    int frames = 0; 
    double unprocessedSeconds = 0; 
    long previousTime = System.nanoTime(); 
    double secondsPerTick = 1/60.0; 
    int tickCount = 0; 
    boolean ticked = false; 
    while(running) 
    { 
     //check ticker code 
     long currentTime = System.nanoTime(); 
     long passedTime = currentTime - previousTime; 
     previousTime = currentTime; 
     unprocessedSeconds = passedTime/1000000000.0; 
     while(unprocessedSeconds > secondsPerTick) 
     { 
      tick(); 
      unprocessedSeconds -= secondsPerTick; 
      ticked = true; 
      tickCount++; 
      if(tickCount % 60 == 0) 
      { 
       //System.out.println(frames + " fps"); 
       previousTime += 1000; 
       fps = frames; 
       frames = 0; 
      } 
     } 
     if(ticked) 
     { 
      render(); 
      frames++; 
     } 
     render(); 
     frames++; 
    } 
+0

问问帮助你的人,因为你可能不需要。 1000在纳秒时间在数学上是不相关的(每秒有1.000.000.000 ns) – zapl

回答

0

这将是一个更容易为render方法只跟踪的时候,它被称为数量,这是渲染的帧数,并以每秒一次的输出其当前的计。由于它是render方法,它似乎很可能会负责在屏幕上“渲染”计数器,除非将这些信息记录到文件或文本控制台。

与此同时计数输出,也重置为零,并再次开始计数。 FPS计数器不是那么复杂,也不需要划分或滴答计数等等。这只是一个(通常)每秒在屏幕上更新一次的怪异计数。

0

看起来他似乎在计算previousTime变量中的秒数。每隔一秒钟,他就会在未处理的秒数中增加一秒钟的时间。一旦未处理的结束数达到60,他就会增加1000,因为它在前一个时间点打满一秒。

另一种方式,每隔60次通过滴答节添加一秒。显然,他期望渲染每秒发生60次。

我以前见过额外的render(),因为他们试图做一个“穷人”版本的同步到时间。

相关问题