Phaser:不同函数中的Tween将对象设置为undefined

时间:2017-06-13 12:02:13

标签: javascript phaser-framework

我在函数调用中得到了一些精灵,如下所示:

moveSlotMachineIn() {
    var comboBaseTweenIn = this.game.add.tween(this.comboBase).to({x: 10}, 2000, "Quart.easeOut", 3000);
    var comboTopTweenIn = this.game.add.tween(this.comboTop).to({x: 10}, 2000, "Quart.easeOut", 3000);
    var comboMaskTweenIn = this.game.add.tween(this.comboMask).to({x: 10}, 2000, "Quart.easeOut", 3000);
    var arrowGrpTweenIn = this.game.add.tween(this.arrowSlotGroup).to({x: 200}, 2000, "Quart.easeOut", 3000);
  }

这是有效的,并且在函数调用时,精灵会从左侧向右滑动。

现在,我也应该将对象滑出来。这是通过计时器完成的,因此它不会立即滑出,如下所示:

this.game.time.events.add(3000, this.comboLayer.moveSlotMachineOut, this);

调用此函数:

moveSlotMachineOut() {
    console.log(this.comboBase);
    var comboBaseTweenOut = this.game.add.tween(this.comboBase).to({x: 1600}, 2000, "Quart.easeOut", 3000);
    var comboTopTweenOut = this.game.add.tween(this.comboTop).to({x: 1600}, 2000, "Quart.easeOut", 3000);
    var comboMaskTweenOut = this.game.add.tween(this.comboMask).to({x: 1600}, 2000, "Quart.easeOut", 3000);
    var arrowGrpTweenOut = this.game.add.tween(this.arrowSlotGroup).to({x: 1600}, 2000, "Quart.easeOut", 3000);
  }

但由于某种原因,我收到以下错误:

  

phaser.js:64795未捕获的TypeError:无法读取属性' x'的   未定义

指向this.comboBase的{​​{1}}。同样奇怪的是,所述函数中的moveSlotMachineOut()位返回 undefined

这是我console.log的初始化:

this.comboBase

其余的有些相似。据我所知,我不清楚变量的值,所以我不确定发生了什么。

可能导致变量未定义的原因是什么?补间做什么吗?

1 个答案:

答案 0 :(得分:1)

显然,打开和关闭括号可能意味着所有的差异。

更改此内容:

this.game.time.events.add(3000, this.comboLayer.moveSlotMachineOut, this);

对此:

this.game.time.events.add(3000, this.comboLayer.moveSlotMachineOut(), this);

现在这将创建一个完全不同的错误,因为(AFAIK).add不喜欢任何带括号的东西,所以最终的代码是:

this.game.time.events.add(3000, function() {this.comboLayer.moveSlotMachineOut()}, this);