requestAnimationFrame
はかなり低レベルですが、すでに言ったことを実行します。おおよそ60 fpsで呼び出されます(ブラウザがそのペースに追いつくことができると仮定します)。したがって、通常は、ゲームループを持つゲームエンジンのように、その上に何かを構築する必要があります。
私のゲームエンジンでは、これがあります(ここではパラフェーズ/簡略化されています):
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);
}
次に、私のゲームエンジンの各要素は、自分自身を更新する方法を知っています。あなたの場合、2、6、8秒ごとに更新する必要がある各要素は、経過した時間を追跡し、それに応じて更新する必要があります。
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
}
}
Canvas APIrequestAnimationFrame
はかなり低レベルであり、アニメーションやゲームエンジンなどの構成要素です。可能であれば、cocos2d-jsなどの既存のものを使用しようと思います。