Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C][SDL] problème de vitesse

ca change d'un ordi à l'autre

Sujet résolu
    29 avril 2006 à 15:52:56

    Hello!
    Alors voila : j'ai codé un genre de pong (le jeu ou il faut renvoyer la balle à l'autre) mais il me reste un dernier (petit?) problème. :'(
    Suivant l'ordinateur sur lequel on joue (le mien et celui d'un pote), la balle ne va pas à la même vitesse. Je supose que c'est à que de la vitesse de calcul du pc... mais comment gère-ton cela?
    Alors j'ai utilisé un système D ou on peut règler cette vitesse (voir code ci-dessous) mais j'aime pas trop cette méthode, elle est contraignante et pose certains problèmes. Quelqu'un sait comment faire qqch de bien, autre que mon foutu systeme D?
    Merci.



    //boucle principale
        while (continuer)
        {
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;

                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_PAUSE:
                            Pause();
                            break;

                        case SDLK_ESCAPE:
                            continuer = 0;
                            break;

                        case SDLK_PAGEDOWN:
                            delai+=20;
                            break;

                        case SDLK_PAGEUP:
                            delai-=20;
                            break;

                        case SDLK_UP:
                            //aller vers le haut
                            break;

                        case SDLK_DOWN:
                            //aller vers le bas
                            break;

                        case SDLK_RIGHT:
                            //aller a droite
                            break;

                        case SDLK_LEFT:
                            //aller a gauche
                            break;

                        case SDLK_SPACE:
                            //stop
                            break;

           
                    }


            }

    SDL_Delay(delai);

    //gérer les collision
    //afficher le jeu
    //etc...
    }

    • Partager sur Facebook
    • Partager sur Twitter
      29 avril 2006 à 15:57:12

      une des méthodes, si la vitesse de déplacement de la balle et des raquettes sont identique.


      #include <windows.h>


      puis tu place dans le code


      Sleep(500); // mettre en pause 500 ms


      Sinon, je ne sais pas si c'est correcte mais si les vitesse sont toute différente, alors il te faut utiliser les threads....
      • Partager sur Facebook
      • Partager sur Twitter
        29 avril 2006 à 16:00:35

        Ben... sleep() c'est la même chose que SDL_Delay(), donc ca ne change pas grand chose...
        Y'a pas un moyen d'adapter le "500" de SDL_Delay(500) ou sleep(500) selon la vitesse du pc?
        • Partager sur Facebook
        • Partager sur Twitter
          29 avril 2006 à 17:40:36

          Déjà pourquoi SDL_Delay, on ne peut pas bouger pendant ce teamps là sa raquette puisque ca bloque tout le prgramme, initialise SDL_INIT_TIMER à côté de SDL_INIT_VIDEO puis utilise SDL_GetTicks()

          ex :

          tempsMouvementBalle = SDL_GetTicks();
          if (SDL_GetTicks = tempsMouvementBalle + 50)
          ......
          // on prend le temps, ensuite on vérifie que quand on reprend le temps, on est bien 50 ms plus tard que lorsqu'on a pris le premier temps ... 
          • Partager sur Facebook
          • Partager sur Twitter
            29 avril 2006 à 17:46:17

            il faut utiliser les timers. moi j'ai réglé le FPS a 30 dans un de mes jeux grace à ça.


            const int FPS = 30;// framerate
            next_time = 0;


            while (continuer)
            {
                t_time = SDL_GetTicks();
                if (SDL_GetTicks() > next_time+1000/FPS)
                {
                    //ton programme
                    next_time = SDL_GetTicks();
                }
            }


            et là, que ce soit sur un athlon 64 3700+,un xp2400+, un PIV 2Ghz ou un xp 1800+ ba c'est pareil, 30 FPS.

            • Partager sur Facebook
            • Partager sur Twitter
              29 avril 2006 à 18:23:42

              nightcyborg, ton truc, en fait, quand le 'if' n'est pas vérifié, la boucle tourne dans le vide alors... non? et le t_time, il sert a quoi? o_O

              Mais sinon ca marche super (sans ce t_time).

              Encore merci à tous :D , j'ai enfin pu terminer mon jeu. Ouaiiiii!
              • Partager sur Facebook
              • Partager sur Twitter
                30 avril 2006 à 1:01:21

                de rien ! ^^

                ba oui elle tourne dans le vide quand le if est pas vérifié, mais on s'en fiche, l'important c'est d'avoir le bon framerate. les boucle vide c'est pas la mort.

                le t_time je 'utilise plustard dans mon jeu, j'ai juste oublié de l'enlever lol
                • Partager sur Facebook
                • Partager sur Twitter

                [C][SDL] problème de vitesse

                × 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