2012-06-06 152 views
5

我正在開發一個使用Processing.js的應用程序。Processing.js計時器

在繪圖循環的每一步中,我將幀數增加一個frame++

我想知道已經過了多少時間。目前爲了獲得時間(知道我的應用程序設置爲以60FPS運行),我確實喜歡:time=frame/60。但是,這隻有在應用程序始終以FPS運行時纔有效,並且我們都知道情況並非如此,因爲它取決於用戶硬件。

我想定時器是非常準確的(只有0.0001s錯誤)。

建議一些javascript算法來計算now()和start_time()之間的差異也是值得歡迎的。

回答

2

您可以將開始時間存儲在變量中。只要你想

然後創建一個新的計時器,並從中減去開始時間變量.. 結果將在毫秒之差..

您還可以使用的實際時間幀分爲計數器讓你的應用程序的準確的平均幀速率..

var startTimer = new Date(); // at start (once) 

,只要你想檢查

var passed = new Date() - startTimer; // in milliseconds 

演示在http://jsfiddle.net/gaby/CF4Ju/

3

如果你想準確性,看看到high resolution timers。但是,此功能在所有瀏覽器上都不可用。

另外,Processing.js有一個名爲frameCount的內置只讀變量。您可以查詢,而不是自己計算框架。

0

我編了這個遊戲類。它採用millis()和如果Timer對象與參數實例是獨立的frameRate

class Timer{ 
    boolean increment, inProgress; 
    int spawn, end; 
    int seconds, tm_limit; 

    Timer(int tm_limit){ 
    this.tm_limit = tm_limit; 
    seconds = tm_limit; 
    increment = false; 
    inProgress = false; 
    } 

    Timer(){ 
    seconds = 0; 
    increment = true; 
    inProgress = false; 
    } 

    void start(){ 
    inProgress = true; 
    spawn = millis(); 
    } 

    void stop(){ 
    inProgress = false; 
    end = millis(); 
    } 

    int getSeconds(){ 
    if(inProgress){ 
     if(increment){ 
     seconds = int((millis() - spawn)/1000); 
     } 
     else{ 
     if(seconds - int((millis() - spawn)/1000) != seconds){ 
      seconds = seconds - int((millis() - spawn)/1000); 
      if(seconds <= 0) { stop(); } 
      else spawn = millis(); 
     } 
     } 
    } 
    return seconds; 
    } 

    void reset(){ 
    if(!increment) 
     seconds = tm_limit; 
    else 
     seconds = 0; 

    inProgress = false; 
    } 
} 

,假設定時器應該減少。否則,退出條件可以通過從getSeconds()方法獲得值來檢查。