-1

由于某种原因,在下面的更新函数中无法调用星号行上创建的 player_controller 实例变量。当我运行此代码时,第二个带星号的行(console.log)将识别并将指定变量从 player_controller 打印到控制台。但是,当我尝试在下面的更新函数(双星号行)中使用 player_controller 时,出现错误:“TypeError: this.player_controller is undefined。”

另请注意,如果粗体行被注释掉,其他行(具有类似创建的变量)运行不会出错。

谁能告诉我这里发生了什么?

    function Engine(){
    var GRAVITY = 0.3;

    this.map_loader = new MapLoader();
    *this.player_controller = new PlayerController();*
    this.map = this.map_loader.load_next_map();
    *console.log(this.player_controller.keys_down.A);*

    this.update = function(){
        **this.player_controller.handle_input(this.map.player);**
        gravity(this.map.player);
        this.map.player.x += this.map.player.dx;
        this.map.player.y += this.map.player.dy;
        ...
        ...

编辑:没有意识到我不能在代码块中进行格式化。

这是该应用程序的链接,如果您在此页面上查看 Web 控制台,您会看到我所说的堆积错误。http://lukescode.net/senior_project_game/main.html

4

2 回答 2

0

可能您将引擎创建为

var engine = Engine();

代替

var engine = new Engine();
于 2013-10-13T00:20:48.830 回答
0

问题最终是我正在调用 Engine.update setInterval(engine.update, 1000/60),正如 bfavaretto 在评论中提到的那样,将“this”更改为更新函数中的引擎以外的东西。解决方案是这样调用函数:

setInterval(function(){return engine.update();}, 1000/60)

这会导致“this”正确地引用更新函数所属的对象而不是窗口。感谢 bfavaretto 为我指明了正确的方向。

于 2013-10-17T04:28:30.257 回答