Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML]Un bug d'horloge

Question délai, c'est raté!

Sujet résolu
    17 décembre 2007 à 19:40:38

    Bonjour

    J'ai quelques soucis pour mettre en place en SFML un système de délai avec les horloges, comme SDL_GetTicks().

    Voici le code que j'utilise:
    1. //Initialisation des variables de temps
    2.     float new_time = 0, old_time = 0;
    3.     int delai = 0.25;
    4.     //Lancement de l'horloge:
    5.     Clock horloge;
    6. new_time = horloge.GetElapsedTime();
    7.         if(new_time > delai){
    8. ...Tas de code qui fait toute sortes de choses...
    9. new_time = 0;
    10.     horloge.Reset();
    11.     }//Fin du if du temps


    Le problème est que le programme se répète à une vitesse infinie.
    J'ai essayé de mettre "1" dans "délai", mais là, le programme plante lorsque j'essaie de rentrer dans la fonction de jeu.

    Le délai que je souhaite mettre est de 250 millièmes de secondes.

    Où se situe le problème?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Un traitement de texte léger, rapide et fiable : DadaWord (ou sur GitHub)
    Anonyme
      17 décembre 2007 à 20:11:34

      Le problème vient sûrement que tu veux donner à un entier (int) une valeur décimale... -> float delai = 0.25f;
      mais pourquoi old_time?
      • Partager sur Facebook
      • Partager sur Twitter
        19 décembre 2007 à 12:30:41

        En fait ce que je veux faire, c'est la même chose que SDL_GetTicks() et SDL_Delay. C'est à dire mettre mon programme en pause pour une certaine durée.

        old_time est une variable inutile (c'est un reste du C et de la SDL [question d'habitude! :) ]).
        • Partager sur Facebook
        • Partager sur Twitter
        Un traitement de texte léger, rapide et fiable : DadaWord (ou sur GitHub)
          19 décembre 2007 à 12:43:16

          c'est etrange, car mise a part le probleme soulevé par hiura, le code devrait fonctionner!

          Tu a bien mis ton if dans ta boucle principale (question bete mais parfois....)?

          du genre:

          1. #include <iostream>
          2. #include <SFML/graphics.hpp>
          3. int main()
          4. {
          5.     float new_time = 0, delai = 1;
          6.     int cpt = 3;
          7.     sf::Clock horloge;
          8.     bool running = true;
          9.     std::cout << "La boucle va s'arreter dans...\n" << cpt <<std::endl;
          10.     cpt--;
          11.     while (running)
          12.     {
          13.         new_time = horloge.GetElapsedTime();
          14.         if(new_time > delai)
          15.         {
          16.             std::cout << cpt << std::endl;
          17.             cpt--;
          18.             horloge.Reset();
          19.         }
          20.         if(cpt == -1)
          21.             running = false;
          22.     }
          23.         return EXIT_SUCCESS;
          24. }
          • Partager sur Facebook
          • Partager sur Twitter
            19 décembre 2007 à 12:50:16

            Citation : remich

            Tu a bien mis ton if dans ta boucle principale (question bete mais parfois....)?


            Hum, vous allez rire, mais je m'étais trompé d'une parenthèse trop loin. :-°

            Ceci dit, je suis un peu étonné qu'il n'y aie pas de fonction pour mettre en pause le programme et economiser du CPU.
            • Partager sur Facebook
            • Partager sur Twitter
            Un traitement de texte léger, rapide et fiable : DadaWord (ou sur GitHub)
              19 décembre 2007 à 12:54:52

              Tu as la fonction Sleep pour ça :).

              sf::Sleep (ton temps en secondes).
              • Partager sur Facebook
              • Partager sur Twitter
                19 décembre 2007 à 12:55:30

                bah pour economiser le cpu déjà il faut fixer une limite de FPS, tu le fait ça?
                • Partager sur Facebook
                • Partager sur Twitter
                  19 décembre 2007 à 12:59:35

                  Tiens, j'y avait pas pensé! :-°
                  Je m'en occupe.

                  Merci beaucoup remich :D
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Un traitement de texte léger, rapide et fiable : DadaWord (ou sur GitHub)

                  [SFML]Un bug d'horloge

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown