Partage
  • Partager sur Facebook
  • Partager sur Twitter

jeu en sdl attendre sans bloqué le jeu

Sujet résolu
    13 mai 2019 à 14:37:19

    bonjour

    je suis entrain de faire un jeu 2d en sdl.

    je lis un fichier où dedans il y a les informations concernant l'affichage et aussi le temps d'attente entre les différents affichage (chaque temps d'attente et différent et il s'exprime en seconde).

    donc dans mon programme je lis le fichier ligne par ligne avec les infos et à la fin de chaque tour de boucle, je fais un sdl_delay(1000 * nb_seconde)

    le probleme c'est que tout le jeu est bloqué et je ne peux rien faire, alors que moi je veux que le jeu continue à tourner mais que mon programme attente nb_seconde avant de lire la ligne suivante dans le fichier

    quelqu'un a une solution svp ?

    • Partager sur Facebook
    • Partager sur Twitter
      13 mai 2019 à 16:14:59

      Salut,

      Est ce que tu peux nous mettre un bout de code ?

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        13 mai 2019 à 16:37:07

        Hello,

        L'alternative serait de faire quelque chose comme ça (en pseudo code) :

        t_acces = mesure_temps()
        while (...) {
          /* ... */
          t_courant = mesure_temps()
          if (t_courant - t_acces > nb_secondes){
            acceder_au_fichier()
            t_acces = t_courant
          }
          /* ... */
        }



        • Partager sur Facebook
        • Partager sur Twitter
          13 mai 2019 à 17:43:00

          Bonjour,

          Tu peux utiliser les timers ou faire une boucle principale qui tourne à période constante et tu comptes le nombre de tours de boucle pour faire les temporisations.

          • Partager sur Facebook
          • Partager sur Twitter
          Architecture SDL                     Multithreading         
            13 mai 2019 à 17:45:27

            merci potterman ca marche
            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2019 à 17:52:52

              picosoft a écrit:

              Bonjour,

              Tu peux utiliser les timers ou faire une boucle principale qui tourne à période constante et tu comptes le nombre de tours de boucle pour faire les temporisations.

              Désolé, mais c'est une idée absolument horrible de compter les tours de boucle pour temporiser. En général le temps d'exécution d'une boucle n'est pas constant, les facteurs suivant peuvent faire varier :

              • Le flag de compilation. -O1, -O2 ou -O3 vont pas fournir les mêmes résultats -> il faudrait alors changer ta variable de tour de boucle à chaque fois que tu changes ton flag de compilation.
              • Ton système d'exploitation. En particulier, si en fait ton processeur est utilisé en étant proche de 100% par d'autres programmes, ça va ralentir l'exécution de ton programme - ce qui va fausser complètement tes prédictions que tu avais faites en "tours de boucles"
              • Niveau hardware, les processeurs type Intel ont un mécanisme du type "prédiction de branchement" qui peut faire varier d'une façon assez conséquente le temps d'exécution des boucles.

              Si on fixe le flag d'optimisation et qu'on n'y touche plus, et si on est sur des architectures ultra prédictibles (ça existe), peut-être.. Mais dans le cadre d'un programmeur lambda qui code sur son x86 et son OS Windows/Linux/Mac, à éviter absolument.

              Quite à compter quelque chose, autant se baser sur les fonctions de mesure de temps (la SDL en a) qui sont faites pour ça, par exemple SDL_GetTicks

              https://wiki.libsdl.org/SDL_GetTicks

              @Luzwitz : OK super :)

              -
              Edité par potterman28wxcv 13 mai 2019 à 17:53:19

              • Partager sur Facebook
              • Partager sur Twitter
                13 mai 2019 à 18:12:33

                Oui, pour faire tourner la boucle à période constante on utilise les fonctions de mesure de temps et cela revient au même que ce que tu proposes ...
                • Partager sur Facebook
                • Partager sur Twitter
                Architecture SDL                     Multithreading         

                jeu en sdl attendre sans bloqué le jeu

                × 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