Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: sfml avancer en fonction de la rotation  (Lu 631 fois)

0 Membres et 1 Invité sur ce sujet

omegadil

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
sfml avancer en fonction de la rotation
« le: Août 23, 2022, 02:30:22 pm »
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)
move(cos(this->getRotation()), sin(this->getRotation()));
la plupart du temps le sprite avance bien mais dés que sa rotation 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)

merci de vos réponses et de votre aide ^^

omegadil

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re: sfml avancer en fonction de la rotation
« Réponse #1 le: Août 30, 2022, 08:21:55 pm »
sujet résolu !

les fonctions cosinus et sinus demandent des radians et non des degrés, donc j'ai utilisé la fonction permettant de calculer un angle (atan2) qui renvoie en radian.
//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);

cordialement