Расширение Phaser.Physics.Impact.ImpactImage в Phaser 3 (с машинописью) - PullRequest
0 голосов
/ 17 марта 2019

В 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, я не понимаю, почему я не могу просто наследовать его в своем собственном объекте.

...