2

这似乎是本网站上的一个热门问题,但以前的答案并没有解决这个问题的实例。

我在 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();
4

1 回答 1

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);
}
于 2012-07-10T18:42:33.013 回答