Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] SDL_PollEvent(&event); ou SDL_WaitEvent(&event);

Une combinaison des deux, possible?

Sujet résolu
    27 mai 2006 à 15:57:18

    Salut à tous (encore... ^^ ) !
    J'ai lu le chapitre sur le temps, et il y aquelque chose que je ne comprend pas!
    J'était en train de créer un pacman, et j'ai voulu rajouter un fantome qui bougerait tout seul, par rapport au temps!
    J'ai donc du enlever mon SDL_WaitEvent(&event); car quand je le met, mon fantome ne bouge que quand je bouge. J'ai donc mis SDL_PollEvent(&event); et là, tout vas TROP VITE!
    A peine j'appuie sur une fleche du clavier mon pacman monte tout droit à une vitesse trèès grande! Ainsi que mon fantome!
    Donc comment puis-je combiner les 2?

    Merci d'avance!
    a++
    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2006 à 16:08:15

      Je ne sais pas si c'est vraiment important, mais moi, j'avais réglé ce problème en plaçant event.type = SDL_NOEVENT; après mes switch.
      Mais je ne sais pas si ça marche réellement.
      • Partager sur Facebook
      • Partager sur Twitter
        27 mai 2006 à 16:10:51

        il suffit de faire bouger tes persos en fonction du temps.
        si(temps_actuel > temps_dernier_deplacement + temps_par_deplacement)
        bouger()
        temps_dernier_deplacement = temps_actuel
        finsi
        • Partager sur Facebook
        • Partager sur Twitter
          27 mai 2006 à 16:14:33

          C'est le problème de PollEvent, il faut le gérer.

          Avec PollEvent, il n'attends pas l'arrivé d'un évenement, si il y en a un, c'est bien, sinon tampis.

          Donc, comme ton programme est très simple et rapide (normalement), il se peut que ta boucle principale s'execute en quelques milisecondes ... ( 5ms par exemple ). Donc tous les 5ms il déplace ton fantôme, et ton perso si tu appuie sur la touche, c'est beaucoup.

          C'est là qu'il faut gérer les FPS, comme c'est expliqué dans le chapitre de la gestion du temps il me semble.

          Par exemple, tu peux minimiser le temps d'execution de la boucle principale a 30ms, avec la gestion du temps. Tu prends la différence, et tu met le prog en sommeil le reste du temps.

          Avec 30ms de temps d'execution de ta boucle, tu aura 1000/30 = 33.3333 fps, ce qui est largement assez.

          Comme ça ton programme ne vivra pas en accéléré ;)

          J'espers t'avoir aidé, sinon c'est bien expliqué dans les cours il me semble.
          • Partager sur Facebook
          • Partager sur Twitter
            27 mai 2006 à 17:17:09

            Merci à tous!
            J'ai reglé le problème! :)
            • Partager sur Facebook
            • Partager sur Twitter

            [SDL] SDL_PollEvent(&event); ou SDL_WaitEvent(&event);

            × 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