2010-06-09 46 views
0

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

每一艘船舶通过以下方式产生:

  1. 创建实体
  2. 添加空间
  3. 添加渲染
  4. 添加其他组件.... ...... ñ 。初始化船

所以我想做的事:

1)创建飞船超,存储HP(如每艘有它),存储空间(同样的原因)

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

您对这种构图方式有什么看法?也许这是更好地把一切都在超类,然后只用很长很长,长的像构造函数创建实例:

星舰(HP:惠普,动画:快译通,武器:武器,....)

需要咨询

回答

0

我觉得Abstract Factory可以解决它

这里是基于抽象的星际争霸

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); 
     } 
    } 
} 
+0

莫非你GI一个dfart如何使用两种工艺类让我看看这个草稿,它是如何寻找我的? – 2010-06-09 07:33:13