キャンバスと簡単なアニメーションをいじっています - マップをレンダリングするための簡単なクラスがありました。
var Map = Class.extend({
init: function () {
//Setup stuff
},
DrawMap: function (canvas, camera) {
//Render the map
}
});
私のコアアプリケーションコードもクラスにあります
var App = Class.extend({
init: function (canvas) {
//Load Stuff
},
GameLoop: function () {
this.map.DrawMap(this.canvas, this.camera);
}
});
以下のコードを使用すると、これは正常に機能し、マップがレンダリングされます。
var canvasMap = document.getElementById('cmap');
app = new App(canvasMap);
setInterval(function () {
app.GameLoop();
}, 100);
ただし、これは理想的ではないことを理解しており、これに変換しようとしています (http://paulirish.com/2011/requestanimationframe-for-smart-animation/)。コードを調整しました。
上記のコードをインデックス ページに追加しました
window.requestAnimFrame = (function () {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (/* function */callback, /* DOMElement */element) {
window.setTimeout(callback, 1000 / 60);
};
そして、初期化コードを変更しました(以前は Set Interval to を使用していました)
var canvasMap = document.getElementById('cmap');
app = new App(canvasMap);
requestAnimFrame(function() { app.GameLoop(); });
ここで、いくつかのデバッグに基づいて、App.GameLoop メソッドが 1 回呼び出されます (ゲーム ループ メソッドにログを追加しました)。そして、再び呼び出されません。これは、JS オブジェクトを使用した経験があるためだと思います。私のバックグラウンドは C# なので、これは私にとって比較的新しいものです。
これが一度だけ呼び出される理由は何ですか?