1
Général / Re: sfml avancer en fonction de la rotation
« 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.
cordialement
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);
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