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