我一直在拉着我的头发试图做这项工作......任何人都知道它的错误是什么?
我试图将文本对象用作按钮,但游戏会启动黑屏并出现错误。
这是打字稿的全部,减去了创建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)
答案 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.onPlay
将undefined
因此Phaser会认为您没有给它一个监听器参数。