Comment créer efficacement des modèles de puces

8

Je suis en train de créer un jeu de tir top-down comme Touhou. Le facteur le plus important du jeu est qu'il existe de nombreux modèles et façons de générer et de tirer des balles sur le joueur, voir cette vidéo: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; fin = 9: 53 ;

En ce moment, j'utilise une classe "Pattern" qui a une série d'étapes sur le déplacement et la prise de vue. Cependant, je pense que cette méthode est assez laborieuse car je dois créer un nouveau modèle pour chaque attaque et peut-être de nouvelles classes Bullet qui implémenteront un certain comportement.

Cette question a reçu un commentaire suggérant que je devrais examiner BulletML pour créer et stocker facilement des puces avec un modèle spécifique. Cela a l'air décent, mais cela m'a amené à me demander quelles autres solutions avez-vous que je devrais prendre en considération?

Mise à jour

Ma conception actuelle est la suivante:

Diagramme UML

Un exemple de modèle implémenté:

Mon GigasPattern exécute d'abord une téléportation qui déplace Alice jusqu'à un certain point (X, Y) sur l'écran. Après cela, le motif commence à utiliser le Mover pour déplacer le sprite (alors que la téléportation a des effets et une animation distincts). Ceux-ci ne sont pas vraiment préoccupants, car ils sont assez simples.

Le tireur crée également diverses attaques, qui sont à nouveau des classes que le tireur peut utiliser pour créer divers modèles de balles, un peu comme celui de la question que j'ai publiée. Une fois que le déménageur a atteint sa destination, lui et le tireur s'arrêtent et reviennent à un état inactif. Le modèle est terminé, est supprimé par l'IA et un nouveau est choisi.

IAE
la source

Réponses:

4

Cela va être laborieux quoi qu'il arrive, créer un tel niveau semble être une tâche facile, et ce n'est peut-être pas si difficile, mais cela prendra toujours beaucoup de temps. (Une estimation très approximative: 1000 fois la durée de lecture pour quelque chose d'aussi cool que cette vidéo.)

Si vous utilisez un langage de script, vous devez toujours écrire exactement le même code, juste dans un langage différent, l'avantage est que vous pouvez créer des niveaux de script sans vous soucier du code compilé. Si vous travaillez dans une grande équipe, vous le voudrez certainement, mais en tant que développeur unique, cela ne fait généralement pas une grande différence.

BulletML n'est pas une réponse en soi, vous avez besoin d'une implémentation fonctionnelle dans votre langue, qui doit s'interfacer avec le reste de votre jeu. Et il reste encore beaucoup à faire pour écrire tous ces fichiers XML.

Je suis enclin à dire que vous devriez vous en tenir à la programmation des modèles souhaités dans les classes comme vous le faites, mais peut-être pourriez-vous révéler quelques exemples de votre structure actuelle, il pourrait y avoir des améliorations à apporter.

Edit:
Il peut y avoir une réalisation qui pourrait simplifier un peu les choses et vous donner une boîte à outils légèrement meilleure. Vous pouvez décrire une IA comme étant un modèle, idéalement, il ne devrait y avoir qu'un seul type d'entité, mais une telle entité peut choisir d'invoquer une autre entité du même type pour faire le travail. Cela vous débarrassera de toute limite quant à la profondeur à laquelle vous pouvez imbriquer la propagation des responsabilités et vous donnera un type de classe en moins à penser.

C'est du moins ce que je comprends du diagramme. Alors que vous devriez à juste titre limiter la quantité de code que vous incluez dans une question, il n'y a jamais un substitut complet pour voir du code réel.

aaaaaaaaaaaa
la source
Bien sûr, merci pour l'aide. J'ai inclus un diagramme UML simplifié de ma conception actuelle ainsi qu'un exemple d'application de la conception en action. J'espère que ça aide!
IAE
2

Peut-être pourriez-vous implémenter un propre petit langage de script pour votre jeu. Ensuite, vous seriez en mesure de scripter les comportements des puces en ajoutant simplement de nouveaux scripts. L'avantage d'un propre langage de script est que vous pouvez l'utiliser sur d'autres parties de votre jeu. Ou vous pouvez essayer d'utiliser Lua (je ne sais pas quel langage / framework vous utilisez). Mais à mon avis, Lua serait une exagération si vous voulez juste avoir des modèles movin.

Entre: J'ai déjà fait ça pour un tireur spatial, mais pour le comportement ennemi. Cela a bien fonctionné, vous pouvez donc vraiment essayer.

M0rgenstern
la source
J'utilise AS et cela ne se prête pas trop bien à l'utilisation de ressources locales, mais l'utilisation d'un langage de script ou XML peut être utile pour moi, alors merci pour la suggestion.
IAE
2

J'étais exactement dans la même situation il y a quelque temps et j'ai commencé à implémenter ma propre architecture pour les modèles de puces. J'ai toutefois abandonné, car je suis tombé sur une implémentation de BulletML pour C # / XNA: BulletML C #

J'ai dû faire quelques changements, mais maintenant, créer des motifs qui ont l'air spectaculaires est vraiment très facile. Il y a une grande démo ici qui vous montre comment, quelques lignes de XML, peuvent créer des modèles impressionnants.

Si vous travaillez sur C #, je vous recommande fortement d'éviter de réinventer la roue. Surtout si vous voulez avoir des motifs très complexes. Cela peut prendre un certain temps pour envelopper votre tête autour de BulletML, mais, à mon avis, cela vaut bien votre temps.

Cependant, si vous décidez de ne pas utiliser BulletML, alors, à tout le moins, jetez un œil au code C # et ayez une idée de son architecture. Cela pourrait vous donner quelques idées.

pek
la source
Merci! Je viens de commencer à m'éloigner d'ActionScript pour ce projet et je l'écris maintenant en C # / XNA. Je vais certainement jeter un œil au code, merci.
IAE