2016-06-11 10 views
0

Im Erstellen eines HTML5 Canvas-Animationen und möchte die Bildrate reduzieren/drosseln. Ich verwende derzeit die requestAnimationFrame-Methode. Um die Bildrate zu drosseln, verwende ich setTimeout.reduce/thottle requestAnimationFrame für Canvas-Animation

Gibt es eine bessere/effizientere Möglichkeit, dies zu tun?

// Game - animation loop 
     var fps = 5; 
     function step() { 
     setTimeout(function() { 
      update(); 
      draw(); 
      window.requestAnimationFrame(step); 
     }, 1000/fps); 
     } 

Dank

+0

ich glaube, diese Antwort es Ihnen erklären kann http://stackoverflow.com/a/19772220/2542172 –

+0

'requestAnimationFrame' jetzt sendet automatisch in einem Zeitstempel, die Sie verwenden können, um die Ausführung Ihres Codes zu drosseln. Siehe hierzu [Fragen und Antworten] (http://stackoverflow.com/questions/19000109/javascript-cant-adjust-framerate-requestanimationframe/19008984#19008984). :-) – markE

Antwort

0
const fps = 5; 
const delay = Math.ceil(1000/fps); 
let last = Date.now(); 
let now; 

function step() { 
    now = Date.now(); 
    if(now - last < delay) { 
     return requestAnimationFrame(step); 
    } 
    last = now; 
    update(); 
    draw(); 
    requestAnimationFrame(step); 
} 

step(); 
+0

danke azamantes und Rudolf .. @ azamantes, ich gehe davon aus, dass das funktionieren wird, wenn ich const ändere und mit 'var' lasse? – stckpete

+0

Absolut, 'const' und' let' sind ES6-Syntax, Sie können sie sehr gut durch alte gute 'var' ersetzen. In diesem speziellen Fall glaube ich nicht, dass sich ihr Verhalten von dem beabsichtigten unterscheiden würde. – Azamantes

+0

danke brilliant – stckpete

Verwandte Themen