Salut,
Normalement dans un jeu 2D on a une fonction principale qui se répete et au sein de celle ci d'autres fonction qui s'éxecutent
Ma question est si je veux ajouter une petite animation dans une fonction "draw" après une collision
normalement une animation est une répetition d'affichage d'image donc ma fonction draw va se repeter jusqu'a ce que la dernière image soit affiché
donc comment dire à la fonction principale quel doit attendre jusqu'a ce que la fonction draw finisse l'animation.
j'ai déjà utilisé des conditions pour arrêter la boucle principale et commencer la boucle draw mais je crois que c'est pas la bonne solution
Je ne sais pas si j'ai bien expliquer ma question
Merci d'avance.
# Gestion des sprites
Posté par GuieA_7 (site web personnel) . Évalué à 10.
En effet ce n'est pas la bonne approche ; il suffit d'imaginer que tu veuilles avoir plusieurs sprites animés en même temps, et que le joueur puisse continuer d'interagir pendant ces animations (exemple: un vaisseau ennemi explose pendant que tu continues à diriger le tien) pour voir que ton approche ne fonctionne pas du tout.
Pour chacun de tes sprites tu dois avoir, d'une manière ou d'une autre, un machine à états finis (exemples d'état pour un personnage: attente, marche, saut, touché…) ; pour chacun des états tu vas avoir une animation[*] , qui peut être cyclique (ex: marche) ou pas (ex: mort). Dans les informations liées à ton sprite, tu stockes à quelle frame de ton animation tu te trouves, ainsi que le timing du moment où tu as commencé à afficher cette frame.
Ta boucle principale va continue à tourner à l'infini, demander à tous tes sprites de se
draw()
. Pour chaque sprite tu vas regarder si le temps depuis l'affichage de la dernière frame est suffisamment grand pour passer à la frame suivante. Par exemple, si tu fais du 60 images par seconde, et que la frame précédente date de plus de 1/60 secondes, tu passes à la frame suivante de son animation.Note que l'état de tes sprites va conditionner d'autres choses que simplement leur animation ; par exemple si ton personnage est dans l'état "marche" et que le joueur appuie sur le bouton de saut, le personnage passe dans l'état "saut" ; mais s'il était déjà dans l'état "saut", ça ne fera rien (s'il n'y a pas de double saut évidemment).
J'espère avoir été clair.
[*] une liste d'images donc. En générale ça sera plutôt une seule image (sprites sheet) avec les différentes étapes (frame) de l'animation côte à côte, et selon l'étape de l'animation tu n'affiches que la sous-partie de l'image qui va bien.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.