Forum Programmation.c animtion sprite lors d'une collision dans un jeu

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
4
nov.
2018

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  (site web personnel) . Évalué à 10.

    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

    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.