Bah alors, comment est formé ton spriteset du personnage ?
C´est comme RPGMaker ? ( apparemment, vu que tu dis 3 mouvements par ligne)
Imagines donc un spriteset comme ça :
[X][X][X] < - De dos
[X][X][X] < - Vers la droite
[X][X][X] < - De face
[X][X][X] < - Vers la gauche
Imagine que chaque case [X] fasse 24 pixels de largeur et 32 de haut ( il me semble que c´est le format RPGMaker).
Pour blitter un bout, tu crées donc un SDL_Rect source.
Pour savoir source.y, ça va dépendre de la touche appuyée ( 0 pour haut, 32 pour droite, 64 pour bas, 96 pour gauche).
Maintenant il faut animer le personnage selon les 3 animation de la ligne, grâce à l´attribut source.x qui doit changer à peu près selon les déplacements du personnage.
Tu mets quelquechose genre :
source.x = ( ((Perso.Coord.x * Perso.Coord.y)/Perso.Vitesse)%3)*24
Comme ça, tu remarques que l´expression dépend de la position de ton personnage, et pas du temps. En effet si tu changes toutes les X secondes, ton perso s´animera à la vitesse du PC et pas à une vitesse équivalente selon les FrameRates. En plus, il s´animera même à l´arrêt ( sauf si tu mets de quoi bloquer)
Moi, je le fais s´animer selon ses coordonnées. Pourquoi je les multiplie ? Simple choix, tu pourrais diviser ça devrait marcher ( mais risque de division par 0, la multiplication est l´opération que je trouve la plus sûre)...
Pourquoi je multiplie ces deux coordonnées ? Eh bien pour avoir une valeur qui change quand le héros se déplace à la fois sur l´axe X et l´axe Y.
Ensuite j´ai donc une valeur qui dépend des coordonnées du perso, mais qui peut avoir plein de valeurs ! Je mets donc un modulo 3, ça réduit les valeurs possibles à 0, 1, et 2. Soit 3 valeurs, et nous avons 3 cases
Maintenant pour obtenir la position exacte, il faut multiplier par la largeur d´un sprite. ce chiffre.
T´as compris ou je recommence tout ? ^^