我试图在create()
状态的Game.js
函数中,按照以下步骤在相位器中启动一个循环计时器:
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调试器,我已经毫无疑问地确认了发生错误时的情况:
this.game
的定义正确,可以在“范围”窗口中浏览this.game
具有已定义的time.time
属性,可以通过在范围窗口中浏览this.game
来找到time
中的this.game.time
上移动鼠标会产生“未定义”。 我想知道可能是什么原因造成的。有人看过吗?
我将Phaser-ES6-Webpack堆栈与Phaser CE 2.9.4一起使用
答案 0 :(得分:0)
我发现语法不会中断并正确执行:
GridView.builder(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 150,
childAspectRatio: 3,
),
itemBuilder: (context, index) {
return Text("$index: Das ist ein langer Text, der hoffentlich auf viele Zeilen umbricht, aber sonst keinen großen Sinn ergibt");
},
),
此处的关键似乎是引用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
,因为此变量似乎在相位器中占有特殊位置,这在javascript中是很不常见的,因为它通常需要显式引用。仍然想知道调试器中观察到的异常行为...