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 - Blit parziale e introduzione agli sprite

Guida SDL

Capitolo 11° - Blit parziale e introduzione agli sprite

<< Precedente Prossimo >>
Blit parziale dell'oggetto e introduzione agli sprite



Dopo aver visto come disegnare immagini utilizzando la trasparenza con colore chiave, non è difficile avvicinarsi alla mentalità degli sprite. Prima, però, è necessario vedere come disegnare porzioni di un'immagine sulla superficie.



Blit parziale:
Come per indicare le coordinate dello schermo dove disegnare la BMP, si utilizza una variabile di tipo SDL_Rect:

SDL_Rect src;

    src.x = 0;

    src.y = 0;        

    src.w = 23;

    src.h = 10;

Eseguendo poi la funzione SDL_BlitSurface(image, &src, screen, &dst ) si comunica alla libreria di disegnare in screen dst.x, dst.y, la porzione dell'immagine image contenuta nel rettangolo di larghezza 23 pixel ed altezza 10.



Cos'è uno sprite:
Per definizione uno sprite è un'immagine bidimensionale che può essere spostata rispetto ad uno sfondo. Nei primi videogame questo veniva gestito direttamente via hardware, per ottenere quindi l'effetto di trasparenza.

Oggi per sprite intendiamo un'immagine 2D, generalmente formata da n frame; questi vengono visualizzati uno alla volta in successione, in maniera da essere sovrapposti e da dare l'impressione di una continuità, di un movimento, fluido il più possibile.

Queste immagini sono caratteristiche di varie tipologie di applicazioni, dai giochi di ruolo 2D, dove sono utilizzati praticamente per ogni cosa, ad applicazioni con gestione del testo, dove gli stessi font hanno uno sprite per ogni stile di caratteri, o charset.

Per essere eloquenti al massimo, è lo stesso sistema adottato per le gif animate, sostanzialmente.



Come applicare il concetto:
Pensando come sviluppare un codice che realizzi questo concetto, il più facile che mi viene alla mente è il seguente (vedi SDL_Example4):



// Prima del ciclo di loop

/* Variabili riguardanti la gestione degli sprites */

    unsigned int frame_attuale=0;

    SDL_Rect src;         

    src.x = (LARGHEZZA_IMMAGINE)*(frame_attuale);

    src.y = 0 ;        

    src.w = LARGHEZZA_IMMAGINE;

    src.h = ALTEZZA_IMMAGINE;



// Nel ciclo di loop, prima di disegnare

/* Cambio frame */

if (++frame_attuale >= NUMERO_FRAMES)

        frame_attuale=0;

    src.x = (LARGHEZZA_IMMAGINE)*(frame_attuale);



/* Disegno la frame */

SDL_BlitSurface_transparent(image, &src, screen, &dst, 0, 0, 0, 1, 0, 0);

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