2012-02-06 12 views
2

Javascriptで単純なゲームエンジンを構築しています。すべての関数がオブジェクトクラスです。Javascriptで変数の可視性について混乱しました

具体的には、私は、更新のためのコンテナとしてグローバルオブジェクトを使用して考えや機能を描くが、これはちょうど私に間違っていると感じていたクラス

function Game(){ 

} 

Game.prototype = { 
update: function(){/* Blah */}, 
draw: function(){/* Foo */}, 

start: function(fps){ 
     //Just a global var where I keep the FPS 
     GS.fps = fps; 
     var start = new Date().getTime(); 
     var time = 0; 
     function timer(){ 
      time += (1000/fps); 
      var diff = (new Date().getTime() - start) - time; 
      if(true) 
      { 
       //Execute on itteration of the game loop 
       this.update(); //It breaks here because this. is timer, not G.Game 

       //Draw everything 
       this.draw(); 

       window.setTimeout(timer,(1000/GS.fps - diff)); 

      }   
     }; 

} 

を持っている...他の方法はあります?親クラスにアクセスするネイティブJSの方法はありますか?

ありがとうございました!

+3

''(真)場合.... – jAndy

+0

は、私はそれが働いていた、これは私のjs OOP ... – Loupax

答えて

2

ここでの問題は、メンバー関数のようにコールバックを使用していることです。これは、コールバックがthisの異なる値で実行されるため、説明したように破損します。コールバックにオリジナルのthisを使用する場合は、それをローカルに保存し、そのローカルをコールバックで使用する必要があります。

var self = this; 
function timer(){ 
    time += (1000/fps); 
    var diff = (new Date().getTime() - start) - time; 
    if(true) 
    { 
    //Execute on itteration of the game loop 
    self.update(); 
    self.draw(); 
    etc ... 
    } 
}; 
+0

えっと何の関係もないかなり確信して!私は自己のタイプが更新されると思ったので、私は同じエラーが出るだろうと思っていましたが、アップデートにはちょうどいいです!ありがとうございました! – Loupax

関連する問題