在使用打字稿的Phaser 3中,我可以像这样扩展Image对象:
export class Unit extends Phaser.GameObjects.Image {
constructor(scene: Phaser.Scene, x: number, y: number) {
super(scene, x, y, 'unit');
this.setScale(0.08); // to illustrate that one can call image methods
scene.add.existing(this);
}
update(): void {}
}
然后像这样实例化我的游戏场景中的对象:
const unit = new Unit(this, 300, 300);
现在,我想使用Impact来实现物理学。我想同样地扩展我的单元对象。
export class ImpactUnit extends Phaser.Physics.Impact.ImpactImage {
constructor(scene: Phaser.Scene, x: number, y: number) {
super(scene.impact.world, x, y, 'unit');
scene.impact.add.existing(this);
}
update(): void {}
}
Typescript很好用,但是当我尝试在游戏场景中实例化它时,出现以下运行时错误:
Uncaught TypeError: Object prototype may only be an Object or null: undefined
这暗示Phaser.Physics.Impact.ImpactImage不是我应该扩展的类。我只是不知道该再扩展哪一个。供参考,我可以做这样的事情:
export class ImpactUnit {
impactImage: Phaser.Physics.Impact.ImpactImage;
constructor(scene: Phaser.Scene, x: number, y: number) {
this.impactImage = scene.impact.add.image(x, y, 'unit');
}
update(): void {}
}
这很好用,但是没有我不认为的那么优雅。由于scene.impact.add.image方法返回了Phaser.Physics.Impact.ImpactImage类的对象,因此我不明白为什么不能在自己的对象中简单地从其继承。