2010-06-09 3 views
0

Je construis une application simple sur as3. Genre de jeu de vaisseau spatial. Ce que je veux faire est de créer plusieurs vaisseaux spatiaux différents. Chacun doit avoir des images différentes (look différent), des jeux d'animation différents (par exemple quand il vole, brûle, endommagé), différents types d'armes et différents contrôleurs (par exemple, un utilisateur, un autre par ordinateur, et vouloir être capable de réutiliser les mêmes vaisseaux pour le contrôleur AI ainsi que pour les contrôles utilisateurs).Suggérer la façon de concevoir plusieurs classes

Chaque navire est créé de la manière suivante:

  1. Créer entité
  2. Ajouter spatiale
  3. Ajouter équarrisseurs
  4. Ajouter d'autres composants .... ...... n . initialisation du navire

Donc ce que je suis en train de faire:

1) Créer StarShip superclasse, pour stocker HP (comme chaque navire l'a), l'espace de stockage (même raison)

2) Créer une classe héritée pour tout autre vaisseau ... (Il contiendra un moteur de rendu - (responsable de la partie affichage), une arme, un ensemble d'animations), etc

Que pensez-vous d'un tel mode de composition? Peut-être qu'il est préférable de placer tout en super classe, puis il suffit de créer des instances à l'aide de longs, longs, longs comme des constructeurs:

StarShip (HP: HP, animations: DICT, arme: Arme, ....)

Besoin de conseils

Répondre

0

Je pense que Abstract Factory peut résoudre

ici est un dfart comment utiliser deux classes d'artisanat basé sur abstrait StarCraft

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

pouvez-vous gi Vois-tu le brouillon, comment ça pourrait me chercher? –

Questions connexes