Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] probléme avec le temps

processeur

Sujet résolu
    8 mai 2006 à 10:50:07

    salut a tous, je viens de lire le tuto de mateo sur la gestion du temps, j'ai ensuite decider de faire un programme qui déplace zozor, il est déplacer vers la gauche et dé qu'il est tout a gauche il va en haut puis tout en haut a droite etc...

    j'ai donc ceci dans mon main :
    int continuer = 1, tempsActuel = 0, tempsPrecedent = 0;
        SDL_Surface *ecran = NULL, *personnage = NULL;
        SDL_Rect positionPerso;
        SDL_Event event;
           
        personnage = IMG_Load("mario_bas.gif");
       
        ecran = SDL_SetVideoMode(300, 300, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Gestion du temps en SDL", NULL);
       
        positionPerso.x = ecran->w / 2 - personnage->w / 2;
        positionPerso.y = ecran->h / 2 - personnage->h / 2;

        SDL_EnableKeyRepeat(10, 10);
       
        while(continuer)
        {
              SDL_PollEvent(&event);
              switch(event.type)
              {
              case SDL_QUIT:
                   continuer = 0;
                   break;                 
              }
             
             
              tempsActuel = SDL_GetTicks();
             
              if(tempsActuel - tempsPrecedent > 30)
              {
               if(positionPerso.x == 0 && positionPerso.y != 0) //si on but a gauche
               positionPerso.y--; //deplacer haut 
                         
               else if(positionPerso.y == 0 && positionPerso.x != ecran->w - personnage->w ) //si on est en haut a gauche
               positionPerso.x++; //droite             
             
               else if(positionPerso.x == ecran->w - personnage->w && positionPerso.y != (ecran->h - personnage->h)) // si on est en haut a droite
               positionPerso.y++; //bas         
             
               else if(positionPerso.y == (ecran->h - personnage->h )&& positionPerso.x != 0) //si on est en bas a droite
               positionPerso.x--; //gauche           
             
               else//si on est au début
               positionPerso.x--; //deplacer gauche             
              }
             
              else // si - 30ms depuis deplacer alors dodo
              {
              SDL_Delay(30 - (tempsActuel - tempsPrecedent));
              }
             
         SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
         SDL_BlitSurface(personnage, NULL, ecran, &positionPerso);
         SDL_Flip(ecran);
             
             
                       
        }/*continuer*/
       
    SDL_FreeSurface(personnage);
    SDL_Quit();   
       


    le probléme c'est que mon programme utilise 80% du CPU, alors que j'ai fait comme mateo le disait avec SDL_Delay.

    Comment faire pour qu'il utilise moins de CPU? l'ordinateur est vieux et lent, cela a t'il a voir?



    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2006 à 10:56:01

      Déjà il manque quelque chose d'important:
      tempsPrecedent = tempsActuel;

      Citation : M@teo21

      Puis (et c'est vraiment le truc à pas oublier), on place le temps "actuel" dans le temps "précédent". En effet, imaginez au prochain tour de boucle : le temps "actuel" aura changé, et on pourra le comparer au temps précédent. A nouveau, on pourra vérifier si 30 ms se seront écoulées et bouger Zozor

      • Partager sur Facebook
      • Partager sur Twitter
        8 mai 2006 à 11:13:15

        merci beaucoup, sa marche. enfin a peu prés, l'utilisation du CPU est decendu de 80 à 13%, avec un délai de 30ms.

        Sa a decendu. Mais pourquoi 13 et pas 00 ? l'ordinateur?


        car en effet, j'ai remarquer qu'en changeant la valeur, l'util CPU change aussi, mais elle n'atteint pas 00.

        Merci d'avance.
        • Partager sur Facebook
        • Partager sur Twitter
          8 mai 2006 à 11:14:47

          Je pense pas que ce soit possible que tu arrive à 0% sauf si tu regarde à un moment ou le cpu ne fait rien.
          • Partager sur Facebook
          • Partager sur Twitter
            8 mai 2006 à 12:35:10

            oki d'acord merci beaucoup :)
            • Partager sur Facebook
            • Partager sur Twitter

            [SDL] probléme avec le temps

            × 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