Bonjour, je reviens ici car non sans peine j'ai fait un système d'animation.
Il n'est pas mauvais mais il ne fonctionne pas comme je le voudrais.
Le principe c'est que je dit Animation.Jouer(Bouger) et là il bouge, mais s'il ne bouge plus je dis Animation.Jouer(Rien) et là il ne fais plus rien.
Sauf que je crois qu'il ne bouge pas en continue et que donc il ne fais rien tout le temps.
Le code qui pose problème.
void Animation::Jouer(std::string Nom, int Vitesse)
{
if (_A_Lecture != _Ref_Animation->Numero_Anim(Nom))
{
_Etape_Lecture = 0;
_A_Lecture = _Ref_Animation->Numero_Anim(Nom);
}
}
void Animation::Changer_Frame(void)
{
if(_A_Lecture == -1)
{
_Etape_Lecture = 0;
_A_Lecture = 0;
}
_Frame = _Ref_Animation->Frame(_A_Lecture,_Etape_Lecture);
int x,y;
x = _Frame % _Ref_Animation->_Nombre_Frame_X * _Ref_Animation->_Taille_Frame.x;
y = _Frame / _Ref_Animation->_Nombre_Frame_X * _Ref_Animation->_Taille_Frame.y;
sf::IntRect Zone(x, y, _Ref_Animation->_Taille_Frame.x, _Ref_Animation->_Taille_Frame.y);
_Sprite->setTextureRect(Zone);
_Etape_Lecture += 1;
if (_Etape_Lecture >= _Ref_Animation->Nombre_Frame(_A_Lecture))
{
_Etape_Lecture = 0;
}
}
Et celui qui détermine les actions du personnage.
if ((_d_x != 0) || (_d_y != 0))
{
_Anim.Jouer("Marcher",20);
if (Touche_Gauche == false && Touche_Droite == false && Touche_Haut == false && Touche_Bas == false)
{
Bouger(_d_x,_d_y,elapsed);
}
}
else _Anim.Jouer("Rien",20);
Recharger();
_Anim.Changer_Frame();
Donc pour résumé même s'il y a mouvement l'animation joué est Rien.
Et pourtant ce mouvement est continue :
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) Element_G->Joueur(0)->Va_Gauche = true;
J'ai surement mal fais la chose.