2016-06-11 2 views
0

im создает анимацию холста HTML5 и хочет уменьшить/уменьшить частоту кадров. В настоящее время я использую метод requestAnimationFrame. Чтобы уменьшить частоту кадров, я использую setTimeout.уменьшить/thottle requestAnimationFrame для анимации холста

Есть ли лучший/более эффективный способ сделать это?

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

Благодаря

+0

Я думаю, что этот ответ может объяснить вам http://stackoverflow.com/a/19772220/2542172 –

+0

'requestAnimationFrame' теперь автоматически отправляет в метку времени, которую можно использовать дросселировать выполнение вашего кода. См. Это [Q & A] (http://stackoverflow.com/questions/19000109/javascript-cant-adjust-framerate-requestanimationframe/19008984#19008984). :-) – markE

ответ

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

спасибо azamantes и Rudolf .. @ azamantes, я предполагаю, что это сработает, если я заменил const и пусть с 'var'? – stckpete

+0

Абсолютно, 'const' и' let' являются синтаксисом ES6, вы вполне можете заменить их старым хорошим 'var'. В этом конкретном случае я не думаю, что их поведение будет отличаться от предполагаемого. – Azamantes

+0

thanks brilliant – stckpete

Смежные вопросы