Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme sdl

event

    12 janvier 2008 à 14:31:09

    salut tout le monde .
    voila je fais un petit jeu "tetris" en c++ et j'utilise la sdl.
    j'aimerais savoir si je peux utiliser SDL_PollEvent et SDL_WaitEvent dans la meme boucle de jeu.
    je veux utiliser SDL_PollEvent seulement pour faire decendre la piece chaque
    x temps .
    et SDL_WaitEvent pour les autres evenements : les boutons .

    j'utilise pour le moment SDL_PollEvent mais cela me cause deux probleme:
    *par exemple des que j'enfonce le bouton "droite" la piece se decale a droite a une tres grande vitesse puisque le PollEvent lui envoie ce signal plusieur fois .
    * les images qui composent la pieces scintillent ce qui est tres desagreable .

    voila merci pour votre ecoute
    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2008 à 16:54:09

      Salut,
      Je ne sais pas si tu peux utiliser les 2 en même temps mais pourquoi ne pas utiliser un thread pour ton PollEvent et utiliser la boucle principale pour ton waitEvent ?
      • Partager sur Facebook
      • Partager sur Twitter
        12 janvier 2008 à 17:27:47

        Pourquoi ne pas modifier la hauteur de la pièce courante à chaque tour de boucle si X nombre de temps est passé?.

        T'a qu'à faire une fonction dans ta classe qui modifie la hauteur de -1. Puis tu met ça dans ton while!

        int tempsPrecedent = 0, tempsActuel = 0;
        tempsActuel = SDL_GetTicks();
        if (tempsActuel - tempsPrecedent > 30) // Si 30 ms se sont écoulées
        {
        piece.descend(); // La pièce descent
        tempsPrecedent = tempsActuel;
        }

        C'est tout...
        • Partager sur Facebook
        • Partager sur Twitter
          12 janvier 2008 à 19:29:18

          moi je vote le bannissement total de SDL_WaitEvent pour un jeu video

          Un jeu vidéo, c'est une boucle principale qui tourne, et qui ne s'arrete jamais : ça tourne !! Ainsi, ça te permet de gérer des animations derriere, ou n'importe quoi d'autre.
          De ce fait, une fonction qui attend un evenement est en conflit meme avec ça.
          --> SDL_Pollevent powa.

          Je conseille meme vivement d'isoler completement la gestion d'events dans une seule fonction, indépendamment des structures ou mouvements des pieces.
          • Partager sur Facebook
          • Partager sur Twitter

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

            12 janvier 2008 à 19:35:59

            Tant qu'à faire tourne toi vers SFML ^^. Librairie C++ et selon certain est bien meilleur que SDL coté performance.
            • Partager sur Facebook
            • Partager sur Twitter
              13 janvier 2008 à 10:13:57

              salut tout le monde !

              Citation : Warzer

              je ne sais pas si tu peux utiliser les 2 en même temps mais pourquoi ne pas utiliser un thread pour ton PollEvent et utiliser la boucle principale pour ton waitEvent ?



              comment ca un thread ? comment je peux faire cela ?

              Citation : dazkou

              Tant qu'à faire tourne toi vers SFML ^^. Librairie C++ et selon certain est bien meilleur que SDL coté performance.




              on m'a beaucoup parlé de la SFML ..je crois que je vais l'essayer plus tard.
              mais pour le moment je prefere continuer ce que j'ai commencé .

              en tout cas merci pour toutes ces reponses !!

              • Partager sur Facebook
              • Partager sur Twitter
                13 janvier 2008 à 12:11:45

                pense au callback toute les 500ms tu appele une fonction qui fait dessendre tes pieces
                • Partager sur Facebook
                • Partager sur Twitter
                  13 janvier 2008 à 12:23:44

                  Pas besoin de thread.

                  Il faut simplement utiliser PollEventet un timer. Il faut mesurer le temps qui s'est écoulé entre 2 passages dans la boucle et si ça correspond au temps que tu veux entre 2 pièces tu déplaces les pièces, sinon, tu ne fais rien.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                    13 janvier 2008 à 21:06:19

                    Citation : nanoc

                    Il faut simplement utiliser PollEventet un timer. Il faut mesurer le temps qui s'est écoulé entre 2 passages dans la boucle et si ça correspond au temps que tu veux entre 2 pièces tu déplaces les pièces, sinon, tu ne fais rien.



                    oui c'est ce que j'ai fait ca marche mais il me reste le probleme de scitillement des images.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      14 janvier 2008 à 19:56:19

                      T'as précisé SDL_DOUBLEBUF lors de la création de la fenêtre ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 janvier 2008 à 11:47:23

                        je conseils SDL_WaitEvent seulement pour les parties "vitrines"
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mars 2008 à 10:11:41

                          pour le scintillement d'image, tu a declaré le doublebuffer(je me rappelle plus du nom exact...)dans setVideo (la nom plus, je rouille ???).
                          si tu ne sais pas ce que c'est , regarde le tutoriel de M@theo
                          sur le C 3eme partie.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          probleme sdl

                          × 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