无法在自己的函数中创建精灵

时间:2019-12-23 15:44:11

标签: javascript phaser-framework phaser

尝试使用.time.addEvent定期生成目标。但是回调函数不会产生精灵。控制台吐出TypeError:this.add是未定义的(我创建的spawnTarget函数内部的那个)。我已经将sprite放置在spawnTarget函数之外,并且效果很好!。

export class StandarModeScene extends Phaser.Scene {

constructor() {
    super('standarMode_scene');
}

preload() {
    this.load.image('target', '../assets/target1.png');
}

create() {
    this.cameras.main.setBackgroundColor('#302e2d'); //setting the background to grey
    let target = this.add.sprite(Phaser.Math.Between(0, 600), Phaser.Math.Between(0, 800), 'target'); //add sprite

    let targetSpawnInterval = 350;

    function spawnTarget() {
       this.add.sprite(Phaser.Math.Between(0, 600), Phaser.Math.Between(0, 800), 'target');
    }

    this.time.addEvent({
        delay: targetSpawnInterval,
        callback: spawnTarget,
        loop: true
    });

}

我也尝试过function spawnTarget() { target.add.sprite(Phaser.Math.Between(0, 600), Phaser.Math.Between(0, 800), 'target'); } 但是TypeError表示target.add是未定义的。

2 个答案:

答案 0 :(得分:0)

听起来像您遇到了“ this”范围问题。结帐https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this了解更多信息。

作为一种解决方案,我认为将“ spawnTarget”函数声明移至“ create”函数之外是最简单的。或者,您可以通过call / apply查看将此上下文传递给函数。

答案 1 :(得分:0)

这没有保留在spawnTarget函数中。 尝试使用bind函数:

this.time.addEvent({
    delay: targetSpawnInterval,
    callback: spawnTarget.bind(this),
    loop: true
});