我正在构建一个项目(小游戏),我试图为我的问题找到解决方案。我有代码,我使用基类Entity,它具有子类(对象)的必要方法,如移动,模型渲染等...在所有其他子类 F.e 中使用的函数实体 -> 基类,拼写对象 -> 子类/扩展实体玩家对象 -> 子类 /扩展实体单元对象 -> 子类/扩展实体在实体中,我有默认的移动方法,其中我检查碰撞,但是当碰撞被击中时,我想调用在XXXObject中定义的CollisionHit上的子类方法(对于每个对象,我需要单独的代码)我的代码实体:class Entity{ constructor(obj: EntityInterface) { /// } public doMove(...):void { // SpeedX SpeedY... // ... if (collisionHit) // getSubclass f.e PlayerObject.onCollisionHit() this.addPosition(speedX, speedY) //... } // ....SpellObject/PlayerObject/...export class xxxObject extends Entity{ constructor(obj:XXXInterface) { // ... } public onCollisionHit(...):void { // Do something (for SpellObject ->Call spell Disapear, for Player set MovementX/Y to 0.. }在此示例中,如何从基类调用 onCollisionHit?我发现的一个可能的解决方案是将子类实例链接到基类的变量在实体 -> 受保护的子类中;在 xxxObject -> this.subclass = this;-> in doMove() -> 当碰撞命中调用 -> if (this.subclass) this.subclass.onCollisionHit()我不确定这是否只是浪费内存的解决方案。谢谢大家的回应。
1 回答

白衣染霜花
TA贡献1796条经验 获得超10个赞
创建 一个抽象方法,并使它自己抽象,因为你似乎期望每个Entity子类都实现该方法,并且想必你永远不能只实例化一个原始实体。onCollisionHitEntityEntity
abstract class Entity
{
constructor(obj: EntityInterface)
{
///
}
public doMove(...):void
{
// SpeedX SpeedY...
// ...
if (collisionHit)
this.onCollisionHit();
this.addPosition(speedX, speedY)
//...
}
public abstract onCollisionHit():void;
// ....
然后,您可以使用例如 从方法实现内部。如果你需要实例化而不是子类,你可以放弃抽象的想法,只用一个默认的(空的?)实现,并让子类覆盖它。this.onCollisionHit()EntityEntityonCollisionHit()
添加回答
举报
0/150
提交
取消