requestAnimationFrame
es bastante bajo nivel, solo hace lo que ya ha dicho: aproximadamente se llama a 60fps (suponiendo que el navegador puede mantener el ritmo). Por lo general, necesitaría construir algo además de eso, al igual que un motor de juego que tiene un bucle de juego.
En mi motor de juego, tengo este (paraphased/simplificado aquí):
window.requestAnimationFrame(this._doFrame);
...
_doFrame: function(timestamp) {
var delta = timestamp - (this._lastTimestamp || timestamp);
for(var i = 0, len = this.elements.length; i < len; ++i) {
this.elements[i].update(delta);
}
this._lastTimestamp = timestamp;
// I used underscore.js's 'bindAll' to make _doFrame always
// get called against my game engine object
window.requestAnimationFrame(this._doFrame);
}
A continuación, cada elemento en mi motor de juego sabe cómo actualizar a sí mismos. En su caso, cada elemento que debe actualizar cada 2, 6, 8 segundos necesario para mantener un registro de cuánto tiempo ha pasado y actualizar en consecuencia:
update: function(delta) {
this.elapsed += delta;
// has 8 seconds passed?
if(this.elapsed >= 8000) {
this.elapsed -= 8000; // reset the elapsed counter
this.doMyUpdate(); // whatever it should be
}
}
La API lienzo junto con requestAnimationFrame
son bastante bajo nivel, que son el bloques de construcción para cosas como animación y motores de juegos. De ser posible, trataría de usar uno ya existente como cocos2d-js o cualquier otra cosa que exista en estos días.
gracias! esto es más o menos lo que estaba buscando. Un poco más de excavación reveló esto: https://gist.github.com/1002116 que es esencialmente lo que tienes. Creo que mi error fue tratar de hacerlo funcionar dentro de un ciclo principal frente a un ciclo para cada objeto. –