2012-06-06 33 views
5

Estoy desarrollando una aplicación con Processing.js.Temporizador Processing.js

En cada paso del ciclo de dibujo, incremente el número de cuadros en uno frame++.

Quiero saber cuánto tiempo ha pasado. Actualmente para obtener el tiempo pasado (sabiendo que mi aplicación está configurada para ejecutarse en 60FPS) me gusta así: time=frame/60. Pero esto solo funciona si la aplicación siempre se ejecuta exactamente en FPS y todos sabemos que no es el caso, ya que depende del hardware del usuario.

Quiero que el temporizador sea bastante preciso (teniendo solo un error de 0,0001s).

Sugerir un algoritmo de javascript para calcular la diferencia entre now() y start_time() también es bienvenido.

Respuesta

2

Puede almacenar la hora de inicio en una variable.

cree un nuevo temporizador siempre que lo desee y restar la variable tiempo de inicio de la misma .. El resultado será la diferencia en milisegundos ..

también puede utilizar el tiempo real dividida por los marcos en contra de obtener una velocidad de fotogramas media exacta de su aplicación ..

algo así como

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

y cada vez que desee comprobar

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

demo en http://jsfiddle.net/gaby/CF4Ju/

3

Si desea exactitud, echar un vistazo en high resolution timers. Sin embargo, esta característica no está disponible en todos los navegadores.

Además, Processing.js tiene una variable incorporada de solo lectura llamada frameCount. Puede consultar eso en lugar de contar los cuadros usted mismo.

0

Inventé esta clase para un juego. Utiliza millis() y es independiente de 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; 
    } 
} 

Si un objeto temporizador se instancia con un parámetro, se supone que Timer debe disminuir. De lo contrario, la condición de salida se puede verificar obteniendo el valor del método getSeconds().