Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec GetTicks

Sujet résolu
    10 juin 2007 à 14:30:16

    voici un programe c++ sdl que j'ai fait. Il s'éteint sans résond au bou de 3secondes (au moment de bliter une nouvelle surface).
    Voici mond code (j'ai vraiment tout revérifié cent fois, pas assez apparemment :euh: ):
    #include <iostream>
    #include <string>
    #include <SDL/SDL.h>
    #include <SDL/SDL_Image.h>


    using namespace std;


    int main(int argc, char *argv[])
    {
        long tempsPrecedent = 0, tempsActuel = 0;
        int b=0;



        SDL_Event event;
        int continuer=1;
        SDL_Surface*ecran, *SurA1[5];
        SDL_Rect  position;

        SDL_Init(SDL_INIT_VIDEO);

        SDL_WM_SetCaption("C++, SDL", NULL);
        SDL_WM_SetIcon(IMG_Load("c++.jpg"), NULL);
        ecran = SDL_SetVideoMode(1000, 875, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));


        SurA1[0]=IMG_Load("nuinui1.png");
        SurA1[1]=IMG_Load("nuinui2.png");
        SurA1[2]=IMG_Load("nuinui3.png");
        SurA1[3]=IMG_Load("nuinui4.png");
        SurA1[4]=IMG_Load("nuinui5.png");







        SDL_EnableKeyRepeat(10, 10);

        while (continuer)
        {
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
            }
             
             SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
             tempsActuel=SDL_GetTicks();
             if(tempsActuel-tempsPrecedent>3000)/*au bout de 3 seconde il est censé me bliter une nouvelle surface(je sais que le programme(s'il fonctionne) bugeras à la fin, mais là c'est juste un test*/
             {
                 SDL_BlitSurface(SurA1[b], NULL, ecran, &position);
                 b++;
                 tempsActuel=tempsPrecedent;
             }
             SDL_Flip(ecran);

        }


        for (int i=0; i<=4; i++)
        {
            SDL_FreeSurface(SurA1[i]);
        }
        SDL_Quit();
        return EXIT_SUCCESS;
    }



    • Partager sur Facebook
    • Partager sur Twitter
      10 juin 2007 à 14:36:29

      Bonjour.

      Normalement ce morceau de code :
      tempsActuel=tempsPrecedent;

      Ne devrais pas ressembler a cela ?
      tempsPrecedent=tempsActuel;


      Car si tu fait comme tu avait fait au bout de trois secondes il va t'afficher l'image, puis en refesant la boucle le temps précédent n'etant pas actualiser la différence serat toujours supérieur a 3 secondes, ducoup il va t'afficher toutes les images d'un coup et il va finir par déborder du tableau -> le bug :D

      EDIT : même comme sa sa devrait bugger, il faut fixer une limite d'incrémentation a 'b', ici il faut limité 'b' a 5, sinon sa déborde.
      Remplace ton if par
      if(tempsActuel-tempsPrecedent>3000 && b <= 5)
      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2007 à 14:50:14

        Oups :-°
        Merci de me l'avoire fait remarquer.
        • Partager sur Facebook
        • Partager sur Twitter

        Problème avec GetTicks

        × 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