莫名其妙的“未定义”计时器变量导致TypeError



我试图在我的 Game.js状态的 create()函数中启动一个循环计时器:

    var jackpotTimer = new Phaser.Timer(this.game);
    jackpotTimer.loop(500, function () {
        this.jackpotSignal.dispatch(this.game.rnd,integerInRange(1000, 3000), this.game.rnd.integerInRange(10000, 20000));
    }, this);
    jackpotTimer.start();

在运行时,我会收到以下错误:

phaser-split.js:56360 TypeError: Cannot read property 'time' of undefined
at 429.Phaser.Timer.start (phaser-split.js:48661)
at __webpack_exports__.a.initJackpotSocket (RGSCommunicator.js:31)
at __webpack_exports__.b.create (Game.js:117)
at 429.Phaser.StateManager.loadComplete (phaser-split.js:8143)
at 429.Phaser.Loader.finishedLoading (phaser-split.js:55895)
at 429.Phaser.Loader.processLoadQueue (phaser-split.js:55847)
at 429.Phaser.Loader.asyncComplete (phaser-split.js:55923)
at 429.Phaser.Loader.jsonLoadComplete (phaser-split.js:56840)
at XMLHttpRequest.xhr.onload (phaser-split.js:56345)

phaser.timer.start打破的行中的线看起来像这样:

this._started = this.game.time.time + (delay || 0);

使用Chrome调试器,我毫无疑问地证实了错误时:

  1. this.game已正确定义,可以在"范围"窗口中探索
  2. this.game具有定义的time.time属性,可以通过在范围窗口中探索this.game来找到
  3. 在源代码窗口中 this.game.time中的 time对鼠标产生"未定义"。
  4. 错误是由上面引用的计时器实例引起的。

我对可能导致这一点的智慧结束了。有人看过吗?

我正在使用带有Phaser CE的Phaser-es6-webpack堆栈2.9.4

我发现语法无法正常打破并执行:

var self = this;        
game.time.events.loop(500, function () {
        self.jackpotSignal.dispatch(game.rnd.integerInRange(1000, 3000), 
game.rnd.integerInRange(10000, 20000));
        console.log("looped");
}, this);

这里的关键似乎是引用game而不是this.game,因为此变量似乎在Phaser中占有特殊位置,在JavaScript中是很不寻常的,因为它通常需要明确的引用。仍然想知道调试器中观察到的异常行为...

相关内容

最新更新