Typescript - 从基类调用子类的实例方法

我正在构建一个项目(小游戏),我试图为我的问题找到解决方案。

我有代码,我使用基类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()

我不确定这是否只是浪费内存的解决方案。谢谢大家的回应。


莫回无
浏览 298回答 1
1回答

白衣染霜花

创建 一个抽象方法,并使它自己抽象,因为你似乎期望每个Entity子类都实现该方法,并且想必你永远不能只实例化一个原始实体。onCollisionHitEntityEntityabstract 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript