2010-06-09 3 views
0

Я строю простое приложение на as3. Вид космической игры. Я хочу сделать несколько разных звездных кораблей. Каждый из них должен иметь разные изображения (разные взгляды), разные наборы анимации (например, когда они летают, сжигаются, повреждаются), разные виды оружия, а также разные контроллеры (например, один может управляться пользователем, другой - компьютером, а я хотите иметь возможность повторно использовать одни и те же корабли для контроллера AI, а также для элементов управления пользователями).Предложите способ проектирования нескольких классов

Каждый корабль создается следующим образом:

  1. Создать объект
  2. Добавить Пространственные
  3. Добавить рендеры
  4. Добавить другие компоненты .... ...... п , INIT корабля

Так что я пытаюсь сделать:

1) Создание звездолета суперкласс, чтобы сохранить HP (как каждый корабль имеет его), хранить пространственные (по той же причине)

2) Создайте унаследованный класс для любого другого корабля ... (Он будет содержать рендерер - (ответственный за часть отображения), оружие, множество анимаций) и т. Д.

Что вы думаете о таком способе композиции? Может быть, это лучше поместить все в супер классе, а затем просто создавать экземпляры, используя длинные, длинные, длинные конструкторы как:

Starship (л.с.: HP, анимация: DICT, оружие: оружие, ....)

нужны советы

ответ

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

Могли бы вы ги я сделал черновик, как он может меня искать? –

Смежные вопросы