2013-10-16 98 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(),因爲他們試圖做一個「窮人」版本的同步到時間。

相關問題