Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] MultiThread

Sujet résolu
    5 avril 2021 à 21:20:24

    Salut tout le monde ! :)

    J'ai commencé à développer mon jeu vidéo et j'ai séparé en 2 threads différents, 1 pour la gestion des touches du clavier, et l'autre pour l'affichage.

    Sauf, que lorsque j'appuie sur une touche pour pouvoir avancer, mon personnage se déplace beaucoup trop vite comment pourrais-je alors régler ce problème ? :/

    Merci de vos réponses d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      5 avril 2021 à 21:31:51

      Dans le thread qui affiche le jeu vidéo, à chaque frame, tu dois calculer le temps qu'il a fallu pour rendre l'image. Tu auras probablement un temps tout petit en milli secondes et si tu l'inverse, ça te donne le nombre d'images par secondes (fps ou frames per second).

      Maintenant quand tu mets à jour la position de ton personnage dans le thread qui gère les évènements, il faut que tu multiplie la vitesse par le temps qu'il a fallu pour générer la frame précédente. Ca revient à faire une règle de trois. La vitesse est exprimée en px/s et par exemple si tu avances pendant 3 ms, alors tu dois calculer la différence de position que ça implique au bout de 3 ms en calculant: v*0.003. De cette manière, le personnage va toujours avancer à la même vitesse quelque soit le framerate du jeu vidéo.

      J'espère que tu sais synchroniser les thread pour ne pas qu'il n'y ait pas d'accès concurrents.

      • Partager sur Facebook
      • Partager sur Twitter
        5 avril 2021 à 21:43:09

        J'ai déjà limité le framerate à 60 alors quand vous dites l'inverse, je dois faire 1/60 ?
        • Partager sur Facebook
        • Partager sur Twitter
          5 avril 2021 à 21:49:01

          Diviser par 60 peut fonctionner dans le cas où le jeu vidéo est toujours capable d'afficher 60 images par secondes. Donc le plus simple oui, c'est de diviser par exactement 60. Par contre si d'un coup le framerate (le nombre d'images par secondes) diminue, la vitesse ne sera pas constante. Donc la meilleure méthode, celle qui marche à tous les coups, c'est de multiplier par le temps nécessaire pour afficher une image.

          -
          Edité par Mat 3910 5 avril 2021 à 21:51:12

          • Partager sur Facebook
          • Partager sur Twitter
            5 avril 2021 à 21:54:49

            Très bien, merci pour votre réponse ça m'aide beaucoup ! :D

            • Partager sur Facebook
            • Partager sur Twitter

            [SFML] MultiThread

            × 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