2010-04-21 7 views
5

Disons que j'ai 4 images et que je veux utiliser ces 4 images pour animer un personnage. Les 4 images représentent le personnage qui marche. Je veux que l'animation se répète aussi longtemps que j'appuie sur la touche pour bouger mais pour arrêter juste quand je la débloque. Il n'a pas besoin d'être spécifique à SFML si vous ne le savez pas, juste une théorie de base m'aiderait vraiment.Comment animer un sprite en SFML

Merci.

Répondre

10

Vous pouvez vouloir un type simple de machine d'état. Lorsque la touche est enfoncée (voir sf::Input's IsKeyDown method), placez le caractère à l'état "animé". Lorsque la touche n'est pas enfoncée, placez le caractère dans l'état "non animé". Bien sûr, vous pouvez toujours sauter cet "état" et faire ce que je mentionne ci-dessous (en fonction de ce que vous faites exactement). Puis, si le personnage est dans l'état "animé", obtenez l'image suivante (voir le paragraphe suivant pour plus de détails). Par exemple, si vous avez vos images stockées dans un tableau simple à 4 éléments, l'image suivante sera à (currentIndex + 1) % ARRAY_SIZE. Selon ce que vous faites, vous pouvez stocker vos images dans une structure de données plus sophistiquée. Si le personnage n'est pas dans l'état "animé", alors vous n'effectuerez aucune mise à jour ici. Si vos «4 images» se trouvent dans le même fichier image, vous pouvez utiliser la méthode SetSubRect de sf :: Sprite pour changer la partie de l'image affichée. Si vous avez réellement 4 images différentes, alors vous devrez probablement utiliser la méthode SetImage de sf :: Sprite pour éteindre les images.

+1

Comment voulez-vous appliquer un framerate pour que l'animation ne se produise pas trop rapidement? – andrewtweber