|
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.
|
|