2013-08-12 6 views
1

Vous trouverez ci-dessous un extrait de code JS/WebGL qui contrôle le minutage de l'animation où requestAnimFrame correspond à shim. Fonctionne sous Dandy FireFox et Safari. Sous Chrome, le elapsedTime devient négatif sur les images 2 et suivantes. Évidemment (selon this article) webkitRequestAnimationFrame ne pas passer l'argument currentTime au rappel draw!?! Quelle est la méthode appropriée, multi-navigateur pour le calcul du temps écoulé? C'EST DE LA FOLIE! Le programme WebGL actuel est le here. Sous FireFox et Safari, vous verrez une seule boucle d'animation - sous Chrome, vous verrez l'animation continuer indéfiniment (jusqu'à ce que je la répare).requestAnimationFrame calcul du temps écoulé

+0

Vous utilisez la cale mal. Lire plus bas sur cette page; il y a un code beaucoup plus robuste que vous devriez utiliser à la place. – Pointy

+0

En outre, sur Chrome, je ne vois * pas * d'animation en cours pour toujours. – Pointy

+0

Sur Chrome (ver 28.0.1500.95), 'requestAnimFrame' utilise la méthode native' requestAnimationFrame'. C'est tout ce que ma cale fait (comme il se doit) dans ce cas. – wcochran

Répondre

0

Si je vous ai eu raison - vous voulez mesurer le temps pris par la fonction de rendu? Ensuite, vous devez simplement faire ceci:

function draw() { 
    requestAnimFrame(draw); 
    var start = Date.now(); 

    // perform your drawing 

    var elapsed = Date.now() - start; 
} 

Mais si vous avez besoin FPS (images par seconde), alors quelque chose comme ça va faire:

var FPS = 0; 
var ticks = 0; 
var lastFPS = 0; 

function draw() { 
    requestAnimFrame(draw); 

    // perform your drawing 

    var now = Date.now(); 
    if (now - lastFPS >= 1000) { 
    lastFPS = now; 
    FPS = ticks; 
    ticks = 0; 
    } 
    ticks++; 
}