在Phaser 3中扩展Phaser.Physics.Impact.ImpactImage(带有打字稿)

时间:2019-03-17 13:24:07

标签: typescript phaser-framework

在使用打字稿的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类的对象,因此我不明白为什么不能在自己的对象中简单地从其继承。

0 个答案:

没有答案