Partage
  • Partager sur Facebook
  • Partager sur Twitter

mini problème

Sujet résolu
    16 août 2006 à 10:11:05

    bonjour, je suis en train de creer un pong que je code étape par étape.
    Mais la j'ai un problème, je demande à se que ma balle se dirige à droite et que lorsqu'elle arrive à 760 - balle->w, celle change de direction et va à gauche. Or lorsqu'elle arrive à 760 - balle->w, la balle ne va pas à gauche, elle s'arrete.
    Voici mon code source:
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL;
    SDL_Rect position, positionRakette1, positionRakette2;
    int continuer = 1, tempsPrecedent = 0, tempsActuel = 0;
    SDL_Event event;
     
    int main(int argc, char *argv[])
    {
       
        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
       
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
       
        balle = IMG_Load("balle.jpg");
        position.x = 400;
        position.y = 300;
       
        rakette = IMG_Load("rakette.jpg");
        positionRakette1.x = 20;
        positionRakette1.y = 250;
       
       
        positionRakette2.x = 760;
        positionRakette2.y = 250;
       
       
        while(continuer)
        {
        SDL_PollEvent(&event);
        switch(event.type)
        {
          case SDL_QUIT:
          continuer = 0;
          break;
        }
             
              tempsActuel = SDL_GetTicks();
              if (tempsActuel - tempsPrecedent > 120)
              {
               position.x++;   //problème à partir d'ici
               
               if(position.x == 760 - balle->w)
               position.x--;     //jusqu'ici
               }
               else
              {
                  SDL_Delay(120 - (tempsActuel - tempsPrecedent));
              }

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    SDL_BlitSurface(balle, NULL, ecran, &position);
    SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
    SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
    SDL_Flip(ecran);
    }
       
        SDL_FreeSurface(balle);
        SDL_FreeSurface(rakette);
       
        SDL_Quit();
        return EXIT_SUCCESS;
    }   
    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2006 à 10:35:34

      Problème de conception, essaies avec quelque chose dans ce genre:
      int sens = 1;

      // ...

      while(continuer)
          {
          SDL_PollEvent(&event);
          switch(event.type)
          {
            case SDL_QUIT:
            continuer = 0;
            break;
          }
               
                tempsActuel = SDL_GetTicks();
                if (tempsActuel - tempsPrecedent > 120)
                {

                 if(position.x >= 760 - balle->w || position.x <= 0 )
                    sens *= -1;
                 }
                 else
                {
                    SDL_Delay(120 - (tempsActuel - tempsPrecedent));
                }

      if (sens == 1)
         position.x++;
      if (sens == -1)
         position.x--;
      SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
      SDL_BlitSurface(balle, NULL, ecran, &position);
      SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
      SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
      SDL_Flip(ecran);
      }
      • Partager sur Facebook
      • Partager sur Twitter

      mini problème

      × 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