Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida SDL - Un primo esempio di visualizzazione di una BMP

Guida SDL

Capitolo 6° - Un primo esempio di visualizzazione di una BMP

<< Precedente Prossimo >>
Un primo esempio di visualizzazione di un'immagine



Una volta impostato il ciclo principale di gioco non è difficile imparare a far visualizzare un'immagine BMP all'utente; cominciamo con la teoria:

Si deve caricare la BMP in una SDL_Surface (*image);

Si deve copiare *image in una determinata posizione (x=20, y=20) nella SDL_Surface principale (*screen).



Quest'ultima operazione consiste nel prendere ogni pixel dell'immagine e copiarla in *screen, dunque si tratta di un semplice ciclo annidato (questo verrà approfondito per spiegare la trasparenza).



Il codice seguente è fatto per essere inserito appena prima del ciclo di gioco



SDL_Surface *image;

image = SDL_LoadBMP( "file_name" );  // carica l'immagine nella superficie, la quale                                                                      

                                                                      //  viene allocata automaticamente



SDL_Rect dst; // struttura composta da x,y,w (larghezza), h (altezza)

                         // è necessaria in SDL_BlitSurface per indicare 'rettangolo' sorgente(src)

                         // o destinazione(dst)

dst.x = 20 ;    // nel caso di rect di destinazione è sufficiente indicare x e y

dst.y = 20 ;

    



SDL_UnlockSurface(screen);  // sblocco screen // necessario per poter modificare questa

                                                   // Surface

     // SDL_BlitSurface(SDL_Surface*image, SDL_Rect *src,  SDL_Surface*screen, SDL_Rect *dst);

SDL_BlitSurface(image, NULL, screen, &dst)



SDL_LockSurface(screen);  // riblocco screen





    //SDL_UpdateRect(SDL_Surface *screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h);

SDL_UpdateRect(screen, 0, 0, 0, 0);  // aggiorna la superficie visualizzata

   // i parametri a 0 stanno a significare che l'aggiornamento interessarà tutto lo schermo,

   // altrimenti qualcosa del tipo 1,1,10,50 avrebbe preso il rettangolo con estremi

   // A(1,1) B(11,51)



Nel caso qui specificato si copia un'immagine BMP caricata da file nella superficie principale a partire dalle coordinate 20,20.

Il fatto che il 2° parametro di SDL_BlitSurface sia NULL sta a significare che si copia l'immagine completa; e' dunque chiaro che basterebbe passargli un SDL_Rect src per copiarne solo la parte desiderata.

Per andare sul concreto, faccio l'esempio degli sprite: in molti tipi di gioco le immagini di un personaggio vengono unite in un unico file; nella fase di disegno se ne prenderà solo una parte alla volta.

Ma questo lo vedremo nel capitolo degli sprite.. andiamo per gradi.

<< Precedente Prossimo >>
A proposito dell'autore

Laurea in Ingegneria Informatica. Dottorato in Neuroingegneria. Conosco i linguaggi C/C++, Java, Delphi, jsp e servlet, PHP, SQL, Bash, R, Matlab, Lisp. Esperienza con le librerie SDL e OpenGL, Ogre3D e Ode, MFC e CLR, Winsock. Conoscenza base di: VB, Assembly.