Recentemente ho iniziato a usare l'HTML5- requestAnimationFrame
-API molto sui siti web di animazione, specialmente dopo aver visto Jank Busters parlare. Questo sembra funzionare piuttosto bene e in realtà migliorare le prestazioni in molti casi.
Tuttavia, una domanda persiste ancora per me: quando si desidera utilizzare un'animazione che NON sia interamente calcolata (si pensi agli spritesheets per esempio) si dovrà mirare a una frequenza fotogrammi fissa. Ovviamente si potrebbe tornare a usare setInterval
di nuovo, ma forse ci sono altri modi per affrontarlo.
I due modi in cui potrei pensare di usare requestAnimationFrame
con una frequenza fotogrammi fissa sono:
var fps = 25; //frames per second
function animate(){
//actual drawing goes here
setTimeout(function(){
requestAnimationFrame(animate);
}, 1000 / fps)
}
animate();
o
var fps = 25; //frames per second
var lastExecution = new Date().getTime();
function animate(){
var now = new Date().getTime();
if ((now - lastExecution) > (1000 / fps)){
//do actual drawing
lastExecution = new Date().getTime();
}
requestAnimationFrame(animate);
}
animate();
Personalmente, opterei per la seconda opzione (la prima sembra barare), ma sembra essere più buggy in determinate situazioni.
Questo approccio vale davvero la pena (specialmente con frame rate bassi come 12.5)? Ci sono cose da migliorare? C'è un altro modo per affrontare questo?