Oppure

Loading
Una prima implementazione di motore fisico



Ho pensato di includere in questa guida anche un piccolo esempio che possa far capire cosa si può sviluppare utilizzando questa libreria.

Ora che abbiamo la padronanza della tecnica degli sprite è necessario almeno dare un'occhiata al movimento, comandato dall'utente tramite tastiera, sullo stile platform; quindi il classico omino che subisce la forza di gravità.



Prima di tutto dobbiamo dichiarare due nuove variabili:



/* Gravità */

        int gravita=0;



    /* Direzione */

        bool sinistra=false;



Poi, nel ciclo di loop togliamo l'effetto in seguito alla pressione della freccia verso il basso, e sostituiamo a quella verso l'alto:



if ( (keys[SDLK_UP] == SDL_PRESSED) && ((dst.y+ALTEZZA_IMMAGINE)>=y) )

{

    gravita=-20;

}



L'intento è di far saltare il personaggio, ora vedremo cosa abbiamo sostanzialmente fatto con questi comandi.



Prima di disegnare, aggiungiamo il codice seguente:



/* Gravità */

    dst.y+=gravita++;

    if ((dst.y+ALTEZZA_IMMAGINE)>=y)

    {

        gravita=0;

        dst.y=y-ALTEZZA_IMMAGINE;

    }



In questo modo la posizione dell'immagine si sposterà verso il basso di un valore crescente.. nel mondo reale la crescita è esponenziale, nei platform questa non sempre lo è; la tipologia di gioco influenza la forza della gravità.

Come soglia di collisione prendiamo i piedi del personaggio, quindi, essendo che le coordinate partono dall'angolo in alto a sinistra dello schermo (0, 0), posizione y attuale + altezza immagine.

A questo punto si può capire che per avere un salto è sufficiente, alla pressione del tasto interessato, assegnare alla gravità un valore negativo; è chiaro che tanto più grande sarà questo numero (in valore assoluto), tanto maggiore sarà la forza del salto.

A cura di: Oligoatria