Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida SDL - Creare un ciclo di gioco

Guida SDL

Capitolo 5° - Creare un ciclo di gioco

<< Precedente Prossimo >>
Creare un ciclo di gioco



    Per rendere utilizzabile una Dialog, utilizzando il procedimento classico di sfruttamento della libreria SDL, è necessaria la creazione di un ciclo di RunTime (1); all'interno di esso si dovrà svolgere l'intero programma, o una parte.

    Si tratta di re-implementare dalle basi la programmazione oggi definita ad eventi; in realtà non è nulla di logicamente complicato. Mi spiego con un esempio:



SDL_Event event, test_event;  

Uint8 *keys;

for( ; ; )                 // ciclo principale di gioco

{

    SDL_Delay(frame_skip);        // rallenta il ciclo di RunTime



    if (SDL_PushEvent(&test_event) == 0)       // se si verifica un qualsiasi evento

                                                                                 // causato dall'utente/

    {

SDL_PollEvent(&event);    // "cattura l'evento"; concretamente, aggiorna la

                                             // rilevazione eventi da periferiche esterne;

keys = SDL_GetKeyState(NULL);               // aggiorna l'array puntato da keys

if ( keys[SDLK_ESCAPE] == SDL_PRESSED )   // esco dal ciclo su pressione

                                                                                  // di Escape

            break;

}

}



SDL_Delay(int) -> è un comando fondamentale, anche concettualmente (vedi il capitolo "I Timer": se viene omesso il ciclo di RunTime rischia di essere eseguito con una frequenza tale da "moltiplicare gli eventi" creando effetti sgradevoli. Per essere più chiari faccio un esempio: in un menù premendo SU si sposta un cursore di una casella, se il RunTime è così veloce da fare più di un ciclo mentre premo il tasto potrei ritrovarmi con il cursore sul soffitto à deve essere limitato, o meglio gestito attraverso un parametro variabile intero (FrameSkip) impostabile manualmente o automaticamente per avere prestazioni ottimali su ogni PC. Tutto questo senza considerare che, se non viene utilizzata questa funzione, il software assorbe una parte considerevole della CPU, rendendo così instabile il sistema.

    

if (SDL_PushEvent(&test_event) == 0) ->
non è necessario che, ad ogni ciclo, si ripetano tutti i controlli sugli eventi, così, per lasciare un po' di respiro al processore, è stato "inventato" un controllo generico necessario al funzionamento in RunTime del sistema ad eventi.

              

if (keys[SDLK_ESCAPE] == SDL_PRESSED) ->
gestione dell'evento "tasto ESCAPE premuto"; nel caso riportato se la condizione è verificata si esce dal ciclo. L'evento SDL_PRESSED è verificabile in keys (di tipo Uint8) grazie all'operazione di aggiornamento svolta nella riga precedente ( keys = SDL_GetKeyState(NULL) ).





La lista di tutti gli eventi DA tastiera e mouse è presente nei file SDL_Events.h e SDL_keysym.h; per completezza l'ho riportata nell'appendice1.







(1) Nella programmazione visuale
(un esempio sono Java, Delphi, Visual Basic, le MFC app. in Visual C++) questo ciclo è presente per definizione, anche se non è immediato il suo riconoscimento nel sorgente - programmazione ad eventi.

<< Precedente Prossimo >>
A proposito dell'autore

Laurea in Ingegneria Informatica. Conosco i linguaggi C/C++, Java, Delphi, jsp e servlet, php, SQL,Bash,R,Matlab; mi sono interessato di: librerie SDL e OpenGL, Ogre3D e Ode, MFC e CLR, winsock. Conoscenza base di: VB, Assembly. Ottenuti i certificati CCNA 1,2,3,4° semestre.