0

ゲームループを使用して、HTML 5 Canvas ゲームに取り組んでいます。

これまでの私のコードは次のとおりです。それは何もしませんし、それで問題ありませんが、エラーが発生します

TypeError: オブジェクト [オブジェクト DOMWindow] にメソッド 'Update' がありません [http://localhost:2516/scripts/lib/Game.js:47]

編集:このコードは機能しますが、問題を反映していません。解決策を反映しています

  var game;
    var Game = function () {
    }


   Game.prototype.Update = function () {

}

Game.prototype.Draw = function () {

}

function GameLoop () {


    game.Update(); //this is line 47
    //context.save();
    game.Draw();
   // context.restore();
    setTimeout(GameLoop, 10);
}
function Start() {
    game = new Game();
   GameLoop();
}

編集:「これ」はゲームオブジェクトではなくドキュメントを見ていると思いますが、その理由や修正方法がわかりません

4

1 に答える 1

1

この問題は、次の行にある可能性がありますGameLoop

setTimeout(this.GameLoop, 10);

「メソッド」参照を渡すことはできません。関数参照のみ。したがって、これが によって呼び出されるsetTimeoutと、次のように呼び出したように、設定されたコンテキストなしで呼び出されます。

GameLoop();

次のいずれかを行う必要がありますbind

setTimeout(this.GameLoop.bind(this), 10);

または、次のように別の関数でラップします(関数としてbind保存すると、独自の値が になります)。thisselfthis

var self = this;
// ...
setTimeout(function () {
    self.GameLoop();
}, 10);
于 2012-07-31T17:24:27.523 に答える