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

Auteur Sujet: Problème d'animation  (Lu 1868 fois)

0 Membres et 1 Invité sur ce sujet

lenweseregon

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
    • E-mail
Problème d'animation
« le: Novembre 16, 2014, 10:15:40 pm »
Bonsoir,

Désolé, le titre n'est pas vraiment explicite, mais j'ai un problème sur un petit bout de code que je veux lancer après avoir appuyé sur une touche, en fait le bout de code fonctionne, mais pas comme je souhaite. Voici le code :

if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
                {
                    sf::Clock horloge;
                    sf::Time temps = sf::seconds(0.5);
                    bool continuer = true;
                    int i = 0;
                    while(continuer)
                    {
                        if(horloge.getElapsedTime().asSeconds() >= temps.asSeconds())
                        {
                            if(i == 4)
                            {
                                continuer = false;
                            }
                            image.move(sf::Vector2f(0,-10));
                            horloge.restart();
                            i++;
                        }
                    }
                }

 Le but finale du bout de code est de faire sauter un personnage mais la, le bout de code ne correspond absolument pas c'est juste un test car après je vois comment il faut faire. Donc le problème, c'est que lorsque j'appuie sur ma touche "Up", ma fenêtre ou il y a déjà des animations se fige (comme une pause ) et dans ma console l'opération se passe, donc dans mon exemple, 2 secondes se passe, et ensuite l'animation de ma fenêtre se reprend avec mon personnage qui à bougé de 40 pixels, c'est donc le problème car je voudrais que mon fond continu à défilé en continue, et de plus je voudrais pouvoir voir l'animation de mon personnage petit à petit. Voila si quelqu'un a une solution je lui serai reconnaissant ! (Le problème si j'ai bien compris est que lorsque je rentre dans ma boucle while, ma fenêtre n'ai plus animé)

Merci bonne soirée.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'animation
« Réponse #1 le: Novembre 16, 2014, 10:58:40 pm »
Tu ne vois pas ce qui coince ? Là tu vas enfermer ton application dans une boucle qui ne va faire que déplacer le personnage. Pendant tout ce temps, il n'y aura plus ni gestion d'évènements, ni affichage, ni mise à jour des autres entités. Il ne faut jamais procéder ainsi. Il faut plutôt procéder avec des états, et selon l'état courant, adapter ce que tu fais à chaque tour de la boucle principale. Par exemple si l'état courant est "saut", alors tu appliques ton équation de saut pour déplacer le personnage d'une petite distance correspondant au temps écoulé depuis le dernier tour de boucle

sf::Clock;
bool jumping = false;

boucle principale
{
    // gestion des évènements...
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Up)
            jumping = true;
    }

    // update...

    sf::Time elapsed = clock.restart();
    if (jumping)
    {
        personnage.move(elapsed.asSeconds() * velocity);
        // ...
    }

    // draw...
}
Laurent Gomila - SFML developer

lenweseregon

  • Newbie
  • *
  • Messages: 10
    • Voir le profil
    • E-mail
Re : Problème d'animation
« Réponse #2 le: Novembre 17, 2014, 12:09:41 am »
Oh mon dieu... Vu comme ça c'est tout simplement logique en effet, j'avais tentais de faire un display pendant la boucle du while pour afficher mais ça m'apporter un résultat tout simplement bizarre. Donc merci beaucoup pour ta réponse qui m'aide beaucoup et me faire comprendre ma grosse bêtise.

Petit question au passage qui n'a pas vraiment de rapport (enfin si avec la sfml), je suis en iut informatique, première année je suis donc rentré il n'y a pas longtemps, et je réalise ce projet (mario like) pour me former, nous sommes lent en cours et nous voyons les tableaux en ce moment. Pour ma part, j'ai quelques notions vraiment élémentaires sur la prog objet (j'ai lu le cours de openclassroom sur les objets en lisant ce qui m'intéressait).
Donc penses tu que ça peut être formateur, de crée pour un petit projet comme ceci, des classes un peu plus évolué que les sprites natifs, pour par exemple le personnage, les backgrounds, les obstacles etc.. Ou juste travailler avec des tableaux de sprite natif et oublier pour l'instant la prog objet ?

Ps: Je tiens à préciser que ce projet n'a pas pour but d'être finis et parfait, mais de parfaire mes connaissances du langages et des algorithmes en général.
Ps2: Petit question du coup qui me vient ne posant cette question, peut-on faire simplement un:
window.draw(Decor) Decor étant un objet ayant comme variable membres une texture, une sprite et une vitesse de défilement ? Je suppose que nous, comment procède ton ? On dessine le sprite de l'objet uniquement ?

Edit pour le PS2: J'ai réussis en appelant une fonction membre getSprite de mon objet décor, je sais pas si c'est la meilleur solution, mais ça fonctionne

Merci de ta réponse bonne soirée
« Modifié: Novembre 17, 2014, 12:47:49 am par lenweseregon »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'animation
« Réponse #3 le: Novembre 17, 2014, 08:00:23 am »
Citer
Donc penses tu que ça peut être formateur, de crée pour un petit projet comme ceci, des classes un peu plus évolué que les sprites natifs, pour par exemple le personnage, les backgrounds, les obstacles etc..
Bien sûr ;)

Citer
Petit question du coup qui me vient ne posant cette question, peut-on faire simplement un:
window.draw(Decor) Decor étant un objet ayant comme variable membres une texture, une sprite et une vitesse de défilement ?
http://sfml-dev.org/tutorials/2.1/graphics-vertex-array-fr.php#creer-une-entite-sfml-like
Laurent Gomila - SFML developer