menu

memento SDL

Références : et tutoriel condensé.

N.B.La version 1.2 SDL fournit des fonctions de tracés simples le paquet SDL_surface.h

  • installation
  • initialisation
  • affectation
  • temporisation
  • événements

    Installation

    Expications détaillées IL faut placer la bibliothèque SDL sous code::block et remonter les .h dans le répertoire include.

    Pour pouvoir compiler, le fichier SDL.dll doit se trouver avec le projet.

    Initialisation (#include SDL.h)

    SDL_Init( SDL_INIT_VIDEO|SDL_INIT_TIMER)
    
    

    Essaye d'initialiser le mode vidéo et la gestion du temps.
    En cas d'erreur, SDL_Init renvoie un résultat négatif.
    pour les autres paramètres.

    atexit(SDL_Quit);
    
    s'assure de la bonne fermeture à la fin
    SDL_WM_SetCaption("Billard", NULL);
    
    Donne un nom à la fenêtre
     
    ecran = SDL_SetVideoMode(800, 600, 32,
    	SDL_HWSURFACE|SDL_DOUBLEBUF);
    
    renvoie un pointeur SDL_Surface*.
    autres paramètres

    N.B. semble être remplacée par SDL_SetWindowDisplayMode(SDL_Window* window,const SDL_DisplayMode* mode)

    Ce sera la surface que l'on pourra basculer à l'écran par SDL_Split

    image = SDL_CreateRGBSurface(SDL_HWSURFACE,
    	hauteur, largeur, profondeur, 0, 0, 0, 0);
    
    Réserve en mémoire (vidéo) et renvoie un pointeur SDL_Surface*.
    références
    SDL_Rect
    
    Type (structure) comprenant .x (abscisse du haut) .y (ordonnée du haut) .h (hauteur) et .w (largeur)
    est utilisé pour définir un recangle dans un image.
    SDL_Surface
    
    Type (structure) destiné à recevoir une surface SDL.
    Elle est généralement renvoyée par une fonction, sous forme de pointeur.
    Comprend des champs .h et .w (hauteur et largeur)
    tous les champs

    Affectation (remplissage, collage, bascule)

    int SDL_FillRect(SDL_Surface* dst,
             const SDL_Rect* rect,
             Uint32 color)
    
    peint avec la couleur color la partie de la surface dst délimitée par rect ou l'ensemble de la surface si NULL
    Après peinture, rect contient la partie effectivement peinte (si le rectangle dépasse les bords).
    la couleur peut être fournie par la fonction SDL_MapRGB(ecran->format, 255,0,0)
    SDL_Surface* SDL_LoadBMP(const char* file)
    
    Charge l'image en mémoire et renvoie un pointeur sur elle.
    Il faut d'abord déclarer une variable pointeur SDL_Surface* pour l'affecter.
    Ne pas oublier de libérer la mémoire en fin d'utilisation par SDL_FreeSurface
    Uint32 couleurTransparence=
    	SDL_MapRGB(boule->format, 255, 255, 255);
    
    SDL_SetColorKey(boule,
    	SDL_SRCCOLORKEY,
    	couleurTransparence);
    
    Définit couleur de transparence et l'affecte à la SDL_Surface* boule
    SDL_BlitSurface(SDL_Surface* src,
    	SDL_Rect* srcrect,
    	SDL_Surface* dst,
    	SDL_Rect* dstrect)
    )
    
    Colle la partie de src spécifiée srcrect (colle tout si NULL) sur dst à la position spécifiée par les champs .x et .y de dstrect.

    La partie effectivement collée sera renvoyée dans dstrect

    N.B.Permet aussi de mettre en tampon une partie de l'écran

     SDL_Flip(SDL_Surface* ecran);
    
    BAscule sur l'affichage du tampon (buffer)

    Temporisations

    Ne pas oublier le drapeau SDL_INIT_TIMER dans SDL_Init(...)
    Uint32 temps=SDL_GetTicks();
    
    Donne le temps en miliseconde depuis l'initialisation par SDL_Init
    while(SDL_GetTicks()
    
    Attend 20 miliisecondes

    Gestion des événements

    Toutes les références : le wiki et l'ancienne doc
    SDL_WaitEvent(&event);
    
    met le processus en pause en attendant un événement. (N'utilise plus de ressource du CPU)
    SDL_PollEvent(&event);
    
    teste s'il y a un événement (et le porocessus continue)
    SDL_Event event;
    
    le type recevant les différents événements.
    switch (event.type)
    {...}
    
    selon le .type différents champs sont accessibles directement ou par fonctions.
    case SDL_KEYDOWN // ou UP :
    SDLKey  touche=event.key.keysym.sym;
    break;
    

    event.key contient une structure/type SDL_KeyboardEvent.

    Cete strucuture comprend les champs :

  • event.key.state qui vaut SDL_KEYDOWN ou SDL_KEYUP
  • event.key.keysym qui est lui même une structure SDL_keysym comprenant les champs :
  • event.key.keysym.sym qui est le code symbolique de SDL SDLK_RETURN, SDLK_a, SDLK_UP, SDLK_HOME, SDLK_F1, KMOD_CTRL ...
    event.key.keysym.unicode le code unicode du caractère.
  • case SDL_MOUSEMOTION :
    
    On peut accèder à la position de la souris par SDL_GetMouseState(&x,&y);

    ou par event.motion qui est une striucture SDL_MouseMotionEvent comprenant les champs :

  • event.motion.x et .y position actuelle de la souris ainsi que
  • .xrel et .yrel (position relatives à quoi ?)
  • case SDL_MOUSEBUTTONDOWN // ou UP
    
    event.button contient alors une structure SDL_MouseButtonEvent comprenant les champs :
  • event.button.button parmi SDL_BUTTON_LEFT, SDL_BUTTON_MIDDLE, SDL_BUTTON_RIGHT
  • event.button.state parmi SDL_PRESSED, SDL_RELEASED
  • event.button.x ou .y coordoonées du lieu de clic.
  • case SDL_QUIT
    
    si la fermetrure de fenêtre a été demandée.