Phaser文本事件无法识别侦听器函数

时间:2018-01-08 09:58:36

标签: typescript phaser-framework

我一直在拉着我的头发试图做这项工作......任何人都知道它的错误是什么?

我试图将文本对象用作按钮,但游戏会启动黑屏并出现错误。

这是打字稿的全部,减去了创建MyGame实例的window.onload处理程序。

class MyGame {

game: Phaser.Game;
textStyle: object = { font: "Ubuntu", fill: "black", align: "center" };

constructor() {
    this.game = new Phaser.Game(800, 640, Phaser.AUTO, 'content', { preload: this.preload, create: this.create, update: this.update });
}

preload() { }

create() {

    this.game.stage.backgroundColor = "#eee";

    let buttonPlay = this.game.add.text(this.game.world.centerX, this.game.world.centerY, "play", this.textStyle);
    buttonPlay.anchor.setTo(0.5);
    buttonPlay.inputEnabled = true;
    buttonPlay.events.onInputUp.add(this.onPlay, this); //line 19

}

update() { }

onPlay() {
    console.log("pressed play");
}
}

这是我得到的错误:

Uncaught Error: Phaser.Signal: listener is a required param of add() and should be a Function.
at i.Signal.validateListener (phaser.min.js:3)
at i.Signal.add (phaser.min.js:3)
at Object.MyGame.create (app.ts:19)

1 个答案:

答案 0 :(得分:1)

不要在构造函数中创建游戏实例,而是在onload处理程序中这样做:

new Phaser.Game(800, 640, Phaser.AUTO, 'content', new MyGame());

Phaser将在您提供的对象上调用create方法:

{ preload: this.preload, create: this.create, update: this.update }

在方法中,this将是您提供的对象,而不是类实例。 (如果你想知道原因,请查看this的工作原理。)

onPlay在该对象上不存在,因此this.onPlayundefined因此Phaser会认为您没有给它一个监听器参数。