Supposons que vous ayez une animation à réaliser lors du tir d'une balle. Comment voulez-vous que la balle apparaisse à la fin de l'animation. La seule chose que je peux comprendre est de connaître la durée de l'animation, et de retarder la définition de la position des balles et de l'activer jusqu'à ce que cette durée se soit écoulée. Je me demandais simplement si c'était la meilleure approche, comment tout le monde gère-t-il cela?
EDIT: Je pense que j'ai du mal à formuler la question correctement.
Réponses:
Fondamentalement, vous êtes sur la bonne voie - vous devez savoir combien de temps dure une animation pour faire ce genre de chose. Les animations sont plus qu'une simple collection de cadres, il y a toutes sortes d'autres informations autour d'eux dont vous avez besoin. Par exemple, combien d'images y a-t-il, la boucle d'animation est-elle bouclée, à quelle vitesse est-elle lue (par exemple 10 images d'animation par seconde ou 25, ou 60?). Chaque animation peut être définie en termes de quelques éléments de données, que certains codes d'animation généralisés peuvent regarder et lire. Vous devez encapsuler la partie d'animation dans son propre morceau de code, qui ne connaît rien à part ces définitions d'animation et comment afficher les images individuelles. C'est-à-dire, avoir un objet d'animation que vous pouvez charger, commencer à jouer, arrêter de jouer et dire de rendre à un emplacement particulier à l'écran.
Une approche flexible consiste à utiliser une sorte de définition d'animation pour encapsuler ce type d'informations. Donc, plutôt que de simplement dire "l'animation X est l'ensemble de ces images, il suffit de les lire", vous obtenez quelque chose d'un peu plus complexe.
Par exemple, avec une sorte de format de données simulé
Donc, votre code dit quelque chose comme:
La façon dont vous détectez les événements peut être soit avec le code d'animation qui vous rappelle (c'est-à-dire quand il détecte un nouvel événement parce que l'animation a joué sur une certaine image, il appelle votre code de jeu pour lui parler du nouvel événement), ou en interrogeant le animation comme ça:
Points à noter:
Si vous n'avez pas besoin que le tir de balle se produise dans l'animation, mais seulement une fois qu'elle est terminée, vous pouvez vous en sortir avec un système beaucoup moins complexe sans notion d'événements. Mais vous voudrez toujours un système dans lequel les animations sont lues par elles-mêmes, sachez combien de temps elles sont et pouvez rappeler le code du jeu lorsqu'une animation se termine.
la source
D'une certaine manière, vous devrez attendre la fin de l'animation et créer la puce à ce stade.
Le simple réglage d'une minuterie fonctionnera, si vous êtes sûr que votre taux d'animation est fixe. À titre de variante mineure, vous pourriez avoir du code interne à la puce qui le fait attendre de manière invisible pendant un moment avant d'apparaître et de bouger.
Selon votre plate-forme de développement, vous pouvez avoir une sorte de fonction de mise à jour d'animation ou de rappel qui vous permettra de répondre au moment exact où l'animation atteint le point souhaité. C'est ainsi que je le ferais avec Flixel, par exemple.
la source
addAnimationCallback
méthode de Flixel peut être utilisée sur l'entité de tir. Dans la fonction de rappel, vous pouvez voir si l'image actuelle de l'animation de tir est l'image qui doit créer une entité puce. Si c'est le cas, vous pouvez ajouter une puce à l'écran.Réponse simple: en supposant que vous ayez une animation que vous souhaitez jouer lorsque le joueur appuie sur le bouton «tirer», puis qu'une balle sorte une fois la lecture terminée. Idéalement, vous devez éviter de coder en dur la durée de l'animation et tirer la balle lorsque l'animation se termine (en utilisant une fonction de rappel ou quelque chose, selon votre plate-forme). Je ne peux penser à aucune autre méthode pour le faire qui ne soit pas trop complexe.
Réponse alternative de Game Design: à moins qu'il n'y ait une très, très bonne raison de le faire, j'éviterais d'avoir un retard en appuyant sur le bouton `` tirer '' et en faisant apparaître la balle. À moins que l'animation ne soit vraiment, vraiment courte (une ou deux images, max, essentiellement un flash de bouche), cela va ralentir la réponse du bouton de tir, et cela deviendra ennuyeux pour un joueur typique. Même si vous décidez d'utiliser une animation avant la sortie des balles (les RPG au tour par tour et les jeux tactiques seraient des raisons acceptables de le faire), je penserais à inclure une option "désactiver les animations" quelque part, pour permettre au jeu pour se déplacer plus rapidement si le joueur le souhaite.
la source
Comme le dit MrCranky; séparez l'animation et les logiques.
Mais surtout, la logique doit rester la partie principale.
Gardez à l'esprit que le contrôle de l'interface utilisateur à partir des logiques est le seul moyen de vous assurer que vous pourrez conserver, réutiliser et partager vos logiques plus tard (nouveau moteur de rendu, nouveau jeu, version serveur sans moteur de rendu ...)
la source
Tout d'abord, j'utiliserais un système d'événements (modèle d'observateur?) Pour découpler des morceaux du code. Ce n'est pas seulement pour l'animation, mais s'applique certainement là-bas. Ensuite, le code d'animation peut simplement dire dispatchEvent (événement) et une autre partie du code écoute cet événement, sans que l'une ou l'autre partie du code ait besoin de se connaître.
Maintenant, le code d'animation doit avoir une référence au répartiteur d'événements (facile à faire avec l'injection de dépendances) et vous devez avoir du XML ou JSON qui définit réellement vos animations. Quelque chose comme:
Lisez les données lors du chargement de l'animation et demandez au code d'animation de distribuer l'événement lorsqu'il se trouve sur cette image pendant la lecture.
la source