Javascript Can';不要在我自己的函数中创建精灵
正在尝试使用.time.addEvent定期生成目标。但是回调函数不会产生精灵。控制台弹出TypeError:this.add未定义(我创建的spawnTarget函数中的一个)。我已经将精灵放置在spawnTarget函数之外,它工作正常Javascript Can';不要在我自己的函数中创建精灵,javascript,phaser-framework,Javascript,Phaser Framework,正在尝试使用.time.addEvent定期生成目标。但是回调函数不会产生精灵。控制台弹出TypeError:this.add未定义(我创建的spawnTarget函数中的一个)。我已经将精灵放置在spawnTarget函数之外,它工作正常 export class StandarModeScene extends Phaser.Scene { constructor() { super('standarMode_scene'); } preload() { this.loa
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未定义。听起来您遇到了“this”范围问题。查看更多信息
作为一种解决方案,我认为将“spawnTarget”函数声明移到“create”函数之外是最简单的。或者,您可以使用call/apply将此上下文传递给您的函数。这不会保留在目标函数中。 尝试使用以下功能:
this.time.addEvent({
delay: targetSpawnInterval,
callback: spawnTarget.bind(this),
loop: true
});