Bonsoir,
J'ai inclus ceci dans mon projet afin de faire tourner des animations basiques ->
https://github.com/SFML/SFML/wiki/Source:-AnimatedSpriteVoici donc mon main :
#include "AnimatedSprite.hpp"
using namespace std;
using namespace sf;
int main() {
srand((int)time(NULL));
int current_drop = 0;
float drop[] = {5.5, 10.3, 11.3, 19.9, 26.7, 27.7, 35.8, 37.9, 43.3, 48.0};
VideoMode screen = VideoMode::getDesktopMode();
ContextSettings settings;
settings.antialiasingLevel = 8;
RenderWindow window(VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "DAREDEWILL", Style::Default, settings);
window.setFramerateLimit(60);
// On centre la fenêtre sur l'écran quelle que soit sa taille
window.setPosition(Vector2i((screen.width-SCREEN_WIDTH)/2, (screen.height-SCREEN_HEIGHT)/2));
Texture dropTexture;
if (!dropTexture.loadFromFile("img/drop.png")) {
cerr << "Impossible de charger l'animation drop.png !" << endl;
return EXIT_FAILURE;
}
Animation dropAnim;
dropAnim.setSpriteSheet(dropTexture);
dropAnim.addFrame(IntRect(0, 0, 34, 34));
dropAnim.addFrame(IntRect(34, 0, 34, 34));
dropAnim.addFrame(IntRect(68, 0, 34, 34));
dropAnim.addFrame(IntRect(102, 0, 34, 34));
Animation* currentAnimation = &dropAnim;
AnimatedSprite animatedDrop(sf::seconds(25), false, false);
Clock clock;
Time currentTime;
while (window.isOpen()) {
currentTime = clock.getElapsedTime();
Event event;
while (window.pollEvent(event)) {
if(event.type == Event::Closed) {
window.close();
} else if (event.type == Event::KeyPressed) {
switch(event.key.code) {
case Keyboard::Escape: window.close();
break;
default:
break;
}
}
}
if (current_drop < 10 && currentTime.asSeconds() > drop[current_drop]) {
animatedDrop.setPosition(sf::Vector2f(rand()%SCREEN_WIDTH, rand()%SCREEN_HEIGHT));
animatedDrop.play(*currentAnimation);
current_drop++;
}
window.clear(Color::Black);
animatedDrop.update(currentTime);
window.draw(animatedDrop);
window.display();
}
return EXIT_SUCCESS;
}
Le but est de jouer une animation à un moment précis (ces moments sont stockés dans un tableau au début du main et correspondent à des secondes, si vous avez une meilleure implémentation à proposer je suis preneur ^^ )
Le truc, c'est que mon animation s'accélère à chaque fois que je la play...
De plus, je ne comprends pas pourquoi même si je précise 25 secondes entre chaque frame lorsque je l'instancie, elle est en réalité beaucoup plus rapide (moins d'une seconde) !
J'ai beau lire le code le code Laurent Gomila dans AnimatedSprite.cpp, je ne vois pas où ça pèche...
Quelqu'un aurait-il une idée ? Merci d'avance
P.S : J'ai sinon entendu dire que Thor serait une meilleure solution pour les animations, mais si je comprends bien, étant avec SFML 2.1 je ne peux pas me servir de la dernière version de Thor qui est la 2.0, je dois me contenter de la 1.1 qui est assez vieille donc ça m'embête un peu...