Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] Le temps

Je n'y comprends plus rien

Sujet résolu
    6 avril 2008 à 9:51:20

    Salut !

    Je code en ce moment un jeu de tir et je voudrais afficher le temps restant.
    Voila le code auquel je pense :
    1. void gererTemps(float &tempsPrecedent,
    2.                 float &temps,
    3.                 sf::String &texte)
    4. {
    5.     sf::Clock clock;
    6.     clock.Reset();
    7.     //Si 1/10 de seconde s'est écoulé
    8.     if(clock.GetElapsedTime() - tempsPrecedent > 0.1)
    9.     {
    10.         //on change le temps
    11.         temps -= clock.GetElapsedTime();
    12.         tempsPrecedent = clock.GetElapsedTime();
    13.     }
    14.     //on convertit le nombre en texte
    15.     ostringstream oss;
    16.     oss << temps;
    17.     string chaine = oss.str() + " s";
    18.     texte.SetText(chaine);
    19. }

    Le texte s'affiche mais ne change pas :( .
    Quel méthode puis-je utiliser dans ce cas ?

    Merci pour vos réponses :) .
    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2008 à 11:32:07

      Salut!

      Enfait c'est simple. Tu effectues un Reset() à chaque fois que tu appelles la fonction! :D
      C'est donc normal que ton if soit toujours faux.

      Tu peux aussi te passer de tempsPrecedent en faisant un Reset() à la place comme ci dessous:


      1. void gererTemps(float &temps,
      2.                 std::string &texte,
      3.                 sf::Clock &clock){
      4.     //Si 1/10 de seconde s'est écoulé
      5.     if(clock.GetElapsedTime()> 0.1f)
      6.     {
      7.         //on change le temps
      8.         temps -= clock.GetElapsedTime();
      9.         clock.Reset();
      10.     }
      11.     //on convertit le nombre en texte
      12.     ostringstream oss;
      13.     oss << temps;
      14.     texte = oss.str() + " s";
      15. }



      Dans ce code j'ai remplacé le sf::String par un std::String pour pouvoir tester le code en console.
      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2008 à 18:38:50

        Ok, maintenant le temps diminue, merci !
        Par contre, je ne comprends pas à quoi sert le f à la fin de la valeur :euh: .
        • Partager sur Facebook
        • Partager sur Twitter
          6 avril 2008 à 18:43:32

          ca indique que le nombre est un float
          • Partager sur Facebook
          • Partager sur Twitter
            6 avril 2008 à 19:16:00

            OK merci !

            J'ai encore un problème ( ^^ ) : je fais une fonction decoupeTemps pour mettre le temps en minutes et secondes. Mais quand je fais un modulo sur les secondes, ça ne marche pas. Je suppose que cela ne marche que sur les entiers. Comment pourrais-je convertir le float en un int ? :)
            • Partager sur Facebook
            • Partager sur Twitter
              6 avril 2008 à 19:21:03

              tu fais un static_cast<int>(TaVariable).
              Par contre il va arrondir et tu vas perdre en exactitude.
              • Partager sur Facebook
              • Partager sur Twitter
                6 avril 2008 à 19:48:34

                non il va tronquer, pour arrondir cf FAQ C de developpez
                • Partager sur Facebook
                • Partager sur Twitter

                [SFML] Le temps

                × 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