2009-11-20 3 views
2

Je suis arrivé à un point dans mon jeu 2D (j'écris tout le moteur moi-même à des fins d'apprentissage), où je dois créer une sorte de classe qui hérite de ma classe GameEntity qui contiendra des entités mon jeu. Par exemple, cette classe (MovableGameEntity) pourrait contenir un ennemi, il faudrait donc l'initialiser avec les cadres de mouvement de la feuille de sprite pour cet ennemi particulier, et en quelque sorte les attributs pour cet ennemi, comme "Énergie", "Vitesse". "," Force "," Défense ".. etc. Mais cette classe pourrait aussi être celle qui contient une sorte de projectile animé lancé par un ennemi ou mon personnage principal, ou un gros rocher qui tombe, etc.Créer une classe MovableGameEntity générique pour mon jeu 2D?

J'essaie de comprendre si cette approche est bonne, et Si c'est le cas, essayez de le rendre assez générique, peut-être «axé sur les données», mais vous vouliez un aperçu ou des conseils sur la façon de le faire. Je ne veux pas finir par "Enemy1 class" "Enemy 2 Class" ... "Enemy N class", etc etc

Donc, tout type de conseil ou d'expérience si quelqu'un a déjà fait quelque chose de similaire, c'est joli Bienvenue.

Répondre

3

Il semble donc que vous voulez avoir une seule classe GameEntity qui peut représenter plusieurs entités - balles, ennemis, etc.

Mais, à bon escient, vous ne voulez pas finir avec EnemyGameEntity et BulletGameEntity , car il s'avère que c'est difficile à travailler. J'ai utilisé le modèle de stratégie ici par le passé. En d'autres termes, plutôt que d'utiliser l'héritage, je créerais probablement une seule classe GameEntity qui contiendrait une référence à un IEntityStrategy (ou IEntityType, ou peu importe comment vous voulez l'appeler). GameEntity passe ensuite la plupart de ses appels de méthode à l'objet EntityStrategy privé (qui encapsule le comportement unique d'une entité donnée), et vous obtenez un comportement très dynamique. Par exemple, disons qu'il est temps pour GameEntity de bouger. Vous appelez GameEntity.move, puis la méthode move appelle .move sur son IEntityStrategy interne. De cette façon, une seule classe GameEntity peut gérer tous vos acteurs, et bien qu'un ennemi puisse toujours se diriger directement vers le héros, une balle continuera toujours sur un chemin direct - EntityStrategy contrôle cela.

Vous pourriez également créer une classe Factory pour configurer votre GameEntities.

Dans un RPG, vous wwould peut-être finir par faire des appels comme celui-ci:

ThisEntity = EntityFactory.Generate(EntityTypes.Orc, 5) 

Où 5 est, par exemple, le niveau de la créature. L'usine pourrait mettre à niveau l'Orc, lui donner un nom en utilisant le schéma de nommage orc, et faire tout ce que vous voulez. En utilisant notre exemple ci-dessus, il pourrait configurer l'orc pour utiliser le schéma de mouvement de Movement.AggressiveAttacker, et ainsi de suite.

Vous avez mentionné être piloté par les données. EntityFactory peut être lié à une base de données pour configurer les Entités, ou un fichier xml, etc.

+0

@Brian: Merci pour la réponse !, Peut-être que j'ai manqué-expliqué :), j'utilise déjà un GameEntity, mais je voulais avoir un seul niveau de l'héritage "MovableGameEntity", à partir de là tout ce que vous avez dit appliquer. ThisMovableEntity = MovableEntityFactory.Generate (..., ...); – Goles

+1

Ah, chéri. :) Pour moi, j'essaierais probablement de mettre l'objet qui a la Force, la Dextérité, etc. en sous-classe de MovableGameEntity juste pour être propre (en supposant qu'une balle n'a pas besoin de Force, etc.). Et de là, tout le reste s'applique. ;) –

1

Vous avez raison d'éviter d'avoir une classe spécifique pour chaque ennemi.

Pour concevoir la classe, vous devez vous demander quelles informations vous devez savoir sur un ennemi en particulier. Mais demandez-le d'un point de vue programmatique.

Par exemple, à quelles informations le moteur graphique de votre jeu a-t-il besoin?Réflexions sur le dessus de ma tête: l'emplacement, l'état du mouvement (pour la feuille de sprite), le type d'ennemi (encore une fois pour la feuille de sprite), plus?

De quelles informations le moteur physique a-t-il besoin? emplacement, la vitesse, la direction du mouvement (note, le moteur physique pourrait être très simple nethack ala)

Quelles informations le système de combat besoin: les statistiques, les armes (inventaire?), les compétences

Quelles informations AI besoin: attaquer/défendre/fuir

Construisez la classe en fonction des différentes parties de votre programme qui interagiront avec lui et de ce qu'elles doivent savoir.

Questions connexes