2010-06-09 47 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