Bonsoir,
L'image suivante représente les 4 images qui compose une de mes animations d'un Sprite.
Comme on le voit, les rectangles englobant mes 4 Pikachu ne sont pas des mêmes dimensions. Bon OK si pour les images 2 et 4 et pour les images 1 et 3 mais, c'est un hasard en fait.
Souvent dans ce genre de petits projets (uiui c'est un petit projet), on choisi la facilité avec des images de même dimension. Après tout c'est nous qui créons nos images, on peut les gérer comme on veut.
Mais j'aimerais dans mon code pouvoir gérer le cas où chaque image de mes animations n'est pas la même.
Et pour l'instant, c'est mal géré.
Dans mon appli, un Sprite est affiché avec pour origine le pixel haut-gauche (le point vert ci-dessus). Ce qui cause un décalage des images, d'une animation à l'autre.
Ce qu'il faudrait faire, c'est considérer le point d'origine au milieu de l'image, autrement dit dessiner l'image à :
X = Sprite.X - Sprite.LARGEUR/2
Y = Sprite.Y - Sprite.HAUTEUR/2
J'ai deux questions avec cette méthode :
- Faudrait-il calculer ces nouvelles valeurs de X e Y temporairement, juste pour l'affichage, ou considérer ces positions comme définitives ? (en gros, Sprite.X == Affichage.Sprite.X ?)
- Cette façon de faire peut-être compliquer une future implémentation de la gestion des collisions ?
Et petite question bonus : Une autre solution ?
Donc je résumé (parceque bon j'écris, j'écris...) : Comment gérer ce décalage qui a lieu lors de l'animation d'un Sprite, en raison de la différence de dimension des dimensions de chaque image qui la compose ?
Pour info, je code en C++ avec la SFML, en usant des classes AnimatedSprite, SpriteFrame et SpriteAnimation, des amélioration persos de respectivement sf::Sprite, sf::Rect<int> et std::vector<SpriteFrame>.
Normalement, ces considérations techniques ne sont pas à prendre en compte, il s'agit de programmation de Sprites en général.
Bonne soirée,
Oragon Efreet
Partager