2012-07-10 114 views
2

這似乎是一個在這個網站上流行的問題,但以前的答案並沒有解決這個問題的實例。Javascript對象沒有方法錯誤

我有一個node.js服務器上的遊戲引擎的開始,但是當我設置它的時候,我在loop方法中出現以下錯誤:Object #<Timer> has no method update

我還以爲是設置原型與GameEngine.prototype.update = function(){ ... };

更新方法解決這個問題的任何幫助,將不勝感激。謝謝。

這裏是整個代碼:

function GameEngine(){ 
    this.fps = 1000/60; 
    this.deltaTime = 0; 
    this.lastUpdateTime = 0; 
    this.entities = []; 
} 

GameEngine.prototype.update = function(){ 
    for(var x in this.entities){ 
     this.entities[x].update(); 
    } 
} 

GameEngine.prototype.loop = function(){ 
    var now = Date.now(); 
    this.deltaTime = now - this.lastUpdateTime; 
    this.update(); 
    this.lastUpdateTime = now; 
} 

GameEngine.prototype.start = function(){ 
    setInterval(this.loop, this.fps); 
} 

GameEngine.prototype.addEntity = function(entity){ 
    this.entities.push(entity); 
} 

var game = new GameEngine(); 
game.start(); 
+0

當你調用this.entities [X] .update(),這是什麼叫什麼呢?如果您嘗試使用this.entities [0] .update()會怎麼樣? for..in循環中的 – 2012-07-10 18:43:29

+2

不應該用於數組。 – ThiefMaster 2012-07-10 18:43:31

回答

7

這似乎成爲一種流行的問題,關於這個網站

是。

但以前的答案還沒有解決這個問題的實例。

真的嗎?你找到了哪些?


的「方法」(this)的上下文中,當功能由超時/事件偵聽器/等執行丟失。

GameEngine.prototype.start = function(){ 
    var that = this; 
    setInterval(function(){ 
     that.loop(); 
    }, this.fps); 
} 

GameEngine.prototype.start = function(){ 
    setInterval(this.loop.bind(this), this.fps); 
} 
+1

是的,當'setTimeout'調用函數時,它將'this'設置爲'Window'。 – 2012-07-10 18:43:42

+0

@Bergi swish ...就像一個魅力。感謝您的幫助。 – RobotEyes 2012-07-10 19:42:38

相關問題