建议设计几个类的方法

时间:2010-06-09 07:23:38

标签: oop actionscript-3

我正在as3上构建简单的应用程序。一种星舰游戏。我想要做的是创建几个不同的星舰。每个人应该有不同的图像(不同的外观),不同的动画集(例如当它飞行,燃烧,损坏时),不同类型的武器以及不同的控制器(例如一个可以由用户管理,另一个可以通过计算机管理,我希望能够为AI控制器和用户控件重复使用相同的船只。

每艘船都是按以下方式创建的:

  1. 创建实体
  2. 添加空间
  3. 添加渲染器
  4. 添加其他组件.... ...... ñ。初始船
  5. 所以我想做的是:

    1)创建StarShip超类,存储HP(每艘船都有),存储空间(同样的原因)

    2)为任何其他船只创建继承的类...(它将包含渲染器 - (负责显示部分),武器,动画集等)

    您如何看待这种构图方式?也许最好将所有内容放在超类中,然后使用long,long,long构造函数创建实例,例如:

    StarShip(惠普:惠普,动画片:DICT,武器:武器,......)

    需要建议

1 个答案:

答案 0 :(得分:0)

我认为Abstract Factory可以解决它

这里有一个dfart如何使用基于抽象星际争霸的两个工艺类

 class StarCraft
{
    private HP hp;
    private Spatial spatial;
    public StarCraft(HP hp,Spatial spatial)
    {
        // store HP and Spatial for your needs in base class
        this.hp = hp;
        this.spatial = spatial;
    }
    // must be implemented in derived classes
    public abstract void Init();
}

internal class TurboStarCraft : StarCraft
{
    private Render render;
    private OtherComponents otherComponents;
    public TurboStarCraft(HP hp, Spatial spatial,Render render, OtherComponents otherComponents) : base(hp, spatial)
    {
        this.render = render;
        this.otherComponents = otherComponents;
    }
    public void Init()
    {
        // init somehow;
    }
}
internal class SuperStarCraft : StarCraft
{
    private Render render;
    private OtherComponents otherComponents;
    public SuperStarCraft(HP hp, Spatial spatial,Render render, OtherComponents otherComponents) : base(hp, spatial)
    {
        this.render = render;
        this.otherComponents = otherComponents;
    }
    public void Init()
    {
        // init somehow;
    }
}

class StarCraftFacroty
{
    public StarCraft Create(const int craftType)
    {
        if(craftType == SUPERCRAFT)
        {
            return new SuperStarCraft(hp, spatial, otherCompenents);
        }
        if(craftType == TURBOCRAFT)
        {
            return new TurboStarCraft(hp, spatial, otherCompenents);
        }
    }
}