Lo sviluppo di giochi in ambiente Android - La Struttura di Libgdx
Libgdx è composto da diversi moduli ognuno dei quali fornisce un diverso servizio per ogni step di una tipica architettura di gioco. La figura seguente mostra questi moduli.
- Input, fornisce un modello per la gestione dei dispositivi di input su tutte le Supporta tastiera, touchscreen, accelerometro e, dove disponibile, mouse.
- Graphics, consente il disegno delle immagini sullo schermo tramite OpenGL ES.
- Files, consente l’accesso ai file su tutte le piattaforme.
- Audio, facilita la registrazione e la riproduzione di suoni su tutte le piattaforme.
- Networking, fornisce i metodi per eseguire operazioni di rete, come ad esempio semplici richieste HTTP o comunicazione client/server con Socket TCP.
Le diverse piattaforme di destinazione di un progetto in Libgdx presentano diversi dispositivi di input. Sui dispositivi desktop l’utente invia comandi tramite tastiera o mouse; sui dispositivi Android, invece, il mouse viene sostituito da un touchscreen capacitivo e la tastiera spesso manca. Inoltre, i dispositivi Android spesso dispongono anche di un accelerometro e di un sensore di campo magnetico.
Libgdx tratta mouse e touchscreen allo stesso modo ed a seconda del dispositivo di input è possibile eseguire un’ interrogazione ciclica dello stato del dispositivo (polling) oppure registrare un listener che si occuperà di ricevere gli eventi di input in ordine cronologico (event handling). Il primo metodo è sufficiente alla gestione di semplici giochi arcade; il secondo metodo, invece, è necessario quando nel videogioco sono coinvolti element i dell’ interfaccia utente come i tasti, poiché questi si basano su sequenze di eventi come tocco/rilascio del tasto. La gestione di tutti i dispositivi di input è affidata all’ interfaccia di Input.
L’ interfaccia Graphics fornisce informazioni riguardo il display del dispositivo o la finestra dell’applicazione, a seconda che si tratti di piattaforma Android o desktop rispettivamente, nonché informazioni e accesso al contesto OpenGL corrente. Più nello specifico fornisce informazioni riguardo la dimensione dello schermo, la densità dei pixel e le proprietà del frame-buffer come la profondità di colore ovvero la quantità di bit necessari per rappresentare un colore in un singolo pixel del frame-buffer, appunto, di un dispositivo video. Come per altri comuni moduli di Libgdx, l’accesso è fornito tramite l’utilizzo di campi statici della classe Gdx.
Il modulo Graphics permette la realizzazione di giochi 2D o 3D. In particolare, per il 2D mette a disposizione il package scene2d che consente un’agevole costruzione di interfacce GUI grazie ad una gerarchia di attori.
Tali attori sono definiti nella classe Actor del package scene2d ed è possibile impostare posizione, dimensione, punto di origine, scala, rotazione e colore.
La seconda delle tre classi che compongono il cuore di scene2d è la classe Group che a sua volta è un attore e può avere attori figli. Quando viene apportata una modifica (rotazione, scala…) ad un oggetto group questa si ripercuote su tutti gli oggetti figli. Infine, la classe Stage che è un InputProcessor che gestisce il disegno degli attori e quando riceve eventi di input li invia agli attori appropriati. La gestione della grafica è affidata all’ interfaccia Graphics.