Guida SDL
Capitolo 6° - Un primo esempio di visualizzazione di una BMP
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.
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.
|