Bonjour, je cherche à faire avancer en continue un sprite en fonction de sa rotation. Je tiens à préciser que sa rotation change tout le temps et que la fonction s'occupant de ça marche trés bien.
Voici la ligne que j'ai essayé (qui est dans la boucle d'sfml)
la plupart du temps le sprite avance bien mais dés que son orientation est environ égal à 0 (donc le sprite est orienté vers le haut de l'écran), il s'arrête d'avancer et se met à reculer. j'ajoute aussi que quand le sprite avance en meme temps qu'il tourne, il se met à trembler (je pense que c'est parce qu'il recule et avance en meme temps)
je pense avoir oublié de préciser ça quand le sprite est orienté à 0 (donc vers le haut) le sinus est également à 0 (logique mais c'est la que ça coince pour avancer) alors que quand le cosinus est égal à 0 (donc le sprite est orienté à 90°) ça marche. Aussi, Je pense aussi que les 2 problèmes cités plus haut sont liés (quand il "tremble" et quand il recule)
mais c'est pire qu'avant, il n'avance plus et "tremble" (quand je dis qu'il "tremble", c'est qu'il avance et recule en même temps) comme quand il tourne.
j'ai directement passé la fonction me permettant de calculer l'angle (atan2) en argument à cosinus et à sinus au lieu de passer par getRotation et de faire des conversions inutiles
//recupère l'abcisse de la position de la souris sur la fenêtre moins l'abscisse actuelle du sprite
float x = m_fenetre->mapPixelToCoords(sf::Mouse::getPosition(*m_fenetre)).x - getPosition().x;
//recupère l'ordonnée de la position de la souris sur la fenêtre moins l'ordonnée actuelle du sprite
float y = m_fenetre->mapPixelToCoords(sf::Mouse::getPosition(*m_fenetre)).y - getPosition().y;
float rotationActuelle{ getRotation() };
double angle{};
if (rotationActuelle != RotLast)
{
angle = atan2f(y, x);
RotLast = rotationActuelle;
CosLast = cos(angle);
SinLast = sin(angle);
}
setRotation(angle * 180 / PI);
move(CosLast, SinLast);
merci à toi fvirtman
cordialement
- Edité par Anonyme 30 août 2022 à 23:38:43
sfml avancer en fonction de la rotation
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html