代码之家  ›  专栏  ›  技术社区  ›  Max Dohme

在AS3中,如何在不继承的情况下为多个类提供额外的功能?

  •  0
  • Max Dohme  · 技术社区  · 15 年前

    我正在用ActionScript编写一个游戏,在这里我有多个类应该可以通过射击“击中”。

    所有其他游戏内实体所继承的最通用的类是CombatObject;Combatship、Combat类固醇和其他各种类都继承自CombatObject。Combatai和CombatPlayer类都继承自Combatship。

    现在我想让战斗员,战斗员和战斗类固醇可以通过射击击中,但我不想让他们继承它(以后可能会有不应该击中的战斗舰)。

    我现在的想法是让这三个实现一个接口,iHitable,这样当它们与一个镜头碰撞时,我可以问 if(hitObject is IHitable) 如果是真的,把子弹销毁并造成伤害。

    现在的问题是,最好每门课都上

    1. 执行所有需要的代码以自己承受损坏(例如检查防护罩、计算损坏百分比等)
    2. 让他们都拥有该类的一个实例 DamageManager 实现一个功能 getDamageManager():DamageManager ,返回处理所有与损坏相关功能的类
    3. (2)的一个缺点是,每个战斗舰、战斗类固醇等必须拥有一个damagemanager实例。让大马士革管理者成为一个单身汉,仅仅参考一下船和给它的照片,然后让它处理其余的事情,也许会更好吗?
    3 回复  |  直到 15 年前
        1
  •  1
  •   subb    15 年前

    class DamageManager {
        public function calculateDamage(...){
            // implement your damage logic...
        } 
    }
    
    interface IHitable {
        function hit(by:GameObject);
    }
    

    class CombatPlayer implements IHitable
    {
        private var _damage:DamageManager;
    
        public function CombatPlayer(){
             _damage = new DamageManager();
        }
    
        public function hit(by:GameObject):void {
            _damage.calculateDamage(...);
        }
    }
    

        3
  •  0
  •   PatrickS    15 年前