Bonjour, après m'être débattu a travers les diverses installations mal menée de SFML et Thor, j'ai enfin cédé et tout compilé moi même au lieu d'utiliser les binaries. Miracle, tout fonctionne parfaitement.
Du coup si je viens ici, c'est parce que je bloque sur un petit bout de code mais qui s'avèrera central dans le futur du projet que j'ai actuellement ( un A/J-RPG classique ).
Désolé si je ne place pas le topic au bon endroit déjà, je ne voyais pas où le mettre si ce n'est dans Graphics :p.
J'ai un sprite, que j'anime grâce à Animator et AnimationFrame, les animations fonctionnent bien sauf un petit hic, impossible de faire un arret propre, c-a-d, remettre l'animation à 0 quand le joueur relâche la touche de déplacement, l'histoire que le personnage ne garde pas le pied en l'air quand il s'arrête
.
Pour le code que j'ai, mon jeu est décomposé en états organisé avec une pile, on commence sur le menu puis on switch avec un certain input, mon animation se passe sur le second état (gameWorld). Chaque état implémente les fonction handleInput(), update(dt) et draw(dt), qui sont appelées par la boucle principale du jeu en regardant le dessus de la pile.
Maintenant pour l'animation :
Ici c'est ce que je fais quand un input est reçu en dehors du poll d'evenements, juste après pour être exact.
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Z))
{
m_joueur.avancer(Direction::Haut);
}
Et là ma fonction avancer() en question :
void Personnage::avancer(Direction dir)
{
switch(dir)
{
case Haut:
m_animator.playAnimation("walkUp",true);
m_sprite.move(0,-2);
break;
case Bas:
m_animator.playAnimation("walkDown",true);
m_sprite.move(0,2);
break;
case Droite:
m_animator.playAnimation("walkRight",true);
m_sprite.move(2,0);
break;
case Gauche:
m_animator.playAnimation("walkLeft",true);
m_sprite.move(-2,0);
break;
}
}
Donc mon problème est en deux partie après retest rapide pendant l'écriture de ce post, d'une mon perso bouge mais ne s'anime qu'après le relachement de la touche, pour une raison que j'ignore, et évidement il boucle l'animation après le relâchement grâce au "true", sauf que j'aimerai bien qu'il boucle tant que j'appuie :<.
J'avais pensé à reset le progress de l'Animator, mais il est en private.
Merci beaucoup pour votre aide
.