Bonjour à tous.
Je suis passé de la SFML 1.6 à 2.0 et je rencontre un soucis pour bouger un RectangleShape à l'écran.
Avec la 1.6 je déplaçais mon rectangle comme ça :
rectangle.Move(0, -300 * fenetre.GetFrameTime());
Avec la 2.0, GetFrameTime() a disparu. J'ai tenté diverses méthodes avec les Clock mais sans grand succès. Le seul code qui fonctionne à peu près est :
sf::Clock clock;
float frameTime = clock.getElapsedTime().asMicroseconds();
rectangle.move(0, -3 * frameTime);
Cependant il y a parfois dans "sauts" dans le déplacement, comme des frames manquantes, et on voit bien que la valeur de "frameTime" du second code n'est pas la même que fenetre.GetFrameTime().
Comment récupérer la même valeur que GetFrameTime() avec la SFML 2 ?
Merci d'avance.
PS : les deux codes se trouvent entre le clear() et le display().
En me servant du lien que tu m'as donné, ce n'est toujours pas fluide :
sf::Clock clock;
sf::Time elapsed = clock.restart();
move(0, -3 * (1 * elapsed.asMicroseconds()));
Le déplacement est toujours saccadé.
EDIT : c'est bon j'ai réglé le problème.
C'est qu'il fallait récupérer le frameTime en dehors du clear/display.
Par contre autre problème : je code mon rectangle de tel sorte à ce qu'il s'arrête 10 pixel avant le bord. Or parfois il s'arrête 5 px avant et non 10px. Y aurait t'il quelque chose à faire pour éviter ce bug ?
Mon code :
if (sf::Keyboard::isKeyPressed(m_idJoueur == 0 ? sf::Keyboard::Z : sf::Keyboard::Up) && getPosition().y >= 10)
move(0, ceil(-300 * tempsFrame));
if (sf::Keyboard::isKeyPressed(m_idJoueur == 0 ? sf::Keyboard::S : sf::Keyboard::Down) && getPosition().y <= m_fenetre.getSize().y - 110)
move(0, ceil(300 * tempsFrame));
EDIT 2 : j'ai aussi réussi à corriger ce bug là. Il faut simplement modifier sa position quand il va au delà des 10px du bord.