Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Le code de base

Si je ne dit pas n'importe quoi... : ]

    12 mars 2006 à 20:37:19

    Alors Bonjour a tous, je viens cette apres-midi de tomber sur le code source de base (lorsqu'on choisit "sdl application" avec code::block), et j'aimerais savoir si j'ai compris a peut-pres le principe (j'ai ajouter des commentaires pour ca.

    Merci de vos réponses... ++

    #include <stdlib.h>
    #include <SDL/SDL.h>

    int main(int argc‚ char** argv)
    {
        /*initialize SDL video*/
        if (SDL_Init(SDL_INIT_VIDEO)<0)
        {
            printf("Unable to init SDL : %s\n"‚ SDL_GetError());
            return 1;
        }

        /*Pour être sûr que tout soit propre avant l'arrêt du programme*/
        atexit(SDL_Quit);

        /*Création d'une surface*/       /*Largeur‚ Hauteur*/
        SDL_Surface* screen = SDL_SetVideoMode(80060016
                                               SDL_HWSURFACE|SDL_DOUBLEBUF);
        if (screen == NULL)
        {
            printf("Unable to set 800x600 video: %s\n"‚ SDL_GetError());
            return 1;
        }

        /*On charge un sprite*/
        SDL_Surface* sprite= SDL_LoadBMP("balle.bmp");
        if (sprite == NULL)
        {
            printf("Unable to load bitmap: %s\n"‚ SDL_GetError());
            return 1;
        }

        /*On centre le sprite*/
        SDL_Rect sprite_position;
        sprite_position.x= (screen–>w – sprite–>w)/2;
        sprite_position.y= (screen–>h – sprite–>h)/2;

        /*La boucle principale*/
        bool end=false;

        while (end != true)
        {
            /*message processing loop*/
            SDL_Event event;

            while (SDL_PollEvent(&event))
            {
                /*check for messages*/
                switch (event.type)
                {
                    /*exit if the window is closed*/
                    case SDL_QUIT :
                        end=true;
                        break;

                    /*Si une TOUCHE est pressée*/
                    case SDL_KEYDOWN :

                        /*Si c'est ECHAPE*/
                        if (event.key.keysym.sym == SDLK_ESCAPE)
                            end=true;

                        /*Si c'est une touche directionelle*/
                        if (event.key.keysym.sym == SDLK_UP)
                            sprite_position.y–=10;

                        if (event.key.keysym.sym == SDLK_DOWN)
                            sprite_position.y+=10;

                        if (event.key.keysym.sym == SDLK_LEFT)
                            sprite_position.x–=10;

                        if (event.key.keysym.sym == SDLK_RIGHT)
                            sprite_position.x+=10;

                        break;

                    /*Si la souris Gauche/droite est pressée*/
                    case SDL_MOUSEBUTTONDOWN :
                         sprite_position.x= (screen–>w – sprite–>w)/2;
                         sprite_position.y= (screen–>h – sprite–>h)/2;
                        break;

                } /*Fin du switch*/
            }

            /*On modifit maintenant l'affichage*/               /*R‚ V‚ B*/
            SDL_FillRect   (screen‚ 0‚ SDL_MapRGB(screen–>format‚ 000));        /*On l'efface*/
            SDL_BlitSurface(sprite‚ 0‚ screen‚ &sprite_position);                   /*On change le sprite*/
            SDL_Flip       (screen);                                                /*On le met à jour*/

        } /*Fin de la boucle principale*/

        SDL_FreeSurface(sprite);    /*On libère la surface à la fin*/
        printf("Exited cleanly\n"); /*Tout est bien qui finit bien ;)*/

        return 0;
    }

    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2006 à 17:26:36

      T'a presque compris...

      SDL_Surface* screen = SDL_SetVideoMode(800, 600, 16,
      SDL_HWSURFACE|SDL_DOUBLEBUF);

      Ca, c'est pour initialiser la fenetre SDL, pas pour créer une surface.

      Ensuite :
      SDL_FillRect (screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); /*Ca dessine un rectangle noir, pour éviter de laisser des traces*/
      SDL_BlitSurface(sprite, 0, screen, &sprite_position);
      /*Ca affiche un sprite sur la surface screen*/
      SDL_Flip (screen); /*On affiche la frame*/
      • Partager sur Facebook
      • Partager sur Twitter

      [SDL] Le code de base

      × 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