Home > Guide e tutorial per Android > Sviluppare un gioco per Android – Lezione 16: i primi passi con libgdx pt.1

Sviluppare un gioco per Android – Lezione 16: i primi passi con libgdx pt.1

programmazione-android16Sviluppare un gioco per Android utilizzando libgdx può essere più semplice di quel che pensate. Tuttavia, in questo contesto, possiamo ragionare in altri termini e pensare al gioco come se fosse una scena teatrale da costruire. Starà a noi, dunque, costruire scenari, attori, ruoli e comportamenti, dando al giocatore le redini della coreografia. Ecco, in linea di massima, i punti salienti che dovremo prendere in considerazione nello sviluppo del nostro gioco, poiché sono proprio questi i processi, strettamente sequenziali, che l’applicazione dovrà eseguire:

  1. Avvio
  2. Caricamento immagini e suoni
  3. Creazione scenari con attori e relativi comportamenti
  4. Delegare il controllo al giocatore
  5. Creazione del motore che manipola gli attori in base all’input ricevuto dall’utente
  6. Determinare quando il gioco finisce
  7. Chiusura applicazione

Insomma, sembra veramente molto semplice e, se vi mettete di impegno, scoprirete che lo è davvero. Il passo iniziale riguarda la creazione della classe più importante per il nostro progetto: StarAssault.java. Andremo a crearla nel progetto principale (ricordate la configurazione di libgdx?) e avrà la seguente struttura:

package it.androidblog.starassault;

import com.badlogic.gdx.ApplicationListener;

public class StarAssault implements ApplicationListener{

	@Override
	public void create() {
		// TODO Auto-generated method stub

	}

	@Override
	public void resize(int width, int height) {
		// TODO Auto-generated method stub

	}

	@Override
	public void render() {
		// TODO Auto-generated method stub

	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub

	}

	@Override
	public void resume() {
		// TODO Auto-generated method stub

	}

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

}

Per ottenerla, basterà implementare ApplicationListener da gdx, come vedete in alto, e Eclipse chiederà automaticamente l’implementazione di tutti i metodi necessari. Essi sono necessari per gestire il ciclo di vita dell’applicazione e, come potete vedere, il loro utilizzo è facilmente intuibile, se non altro molto di più della logica richiesta da OpenGL, come visto qualche settimana fa.

Il metodo create() è quello che viene chiamato per primo. Quando ciò accade, l’applicazione è pronta per caricare tutto ciò che ci serve per giocare, nonché attori e scenari. Questo è ciò che libgdx sta facendo per noi. Per quanto riguarda il metodo resize(), invece, esso serve a ridimensionare gli oggetti quando viene cambiata la finestra di gioco.

Tuttavia, il cuore del gioco che stiamo sviluppando sarà costituito dal metodo render(), un ciclo infinito che verrà continuamente chiamato mentre stiamo giocando. Esso, infatti, terminerà solo quando termina il gioco. Naturalmente, il gioco può essere messo anche in pausa, pause() e resume() servono rispettivamente per interrompere momentaneamente il gioco e, successivamente, riprenderlo.

Alla fine di tutto, dovrà essere chiamato il metodo dispose(). Esso ci serve per liberare memoria e “smantellare” la nostra scena teatrale. Fate attenzione a non confondervi quando parliamo di terminare il gioco e terminare l’applicazione. Nel primo caso, ci riferiamo ad un semplice stato di gioco (game over), mentre nel secondo a quando l’applicazione viene chiusa definitivamente.

Gli attori

A questo punto, muoviamo i primi passi verso la costruzione degli scenari e degli attori. Naturalmente, avremo bisogno di un personaggio principale (che chiameremo Bob), il quale dovrà muoversi nei vari livelli che saranno composti da blocchi oltre i quali Bob non potrà andare. Ora, iniziamo a porci le domande principali per lo sviluppo del nostro videogioco: quali stati ha Bob? Proviamo a identificarli:

  • Idle: quando Bob è inattivo, ossia quando non salta né si muove, ma è ancora vivo;
  • Moving: quando si muove (velocità costante) a destra o sinistra;
  • Jumping: quando salta (anche in questo caso verso destra o sinistra);
  • Dead: facilmente intuibile, in questo stato Bob è morto e non può muoversi.

Per quanto riguarda il mondo e i livelli, ci viene facile utilizzare una griglia, poiché i blocchi sono tutti uguali e, in fin dei conti, stiamo parlando sempre di una spazio a due dimensioni. Le immagini qui di seguito vi chiariranno le idee.

level01 unit_system1

Come potete vedere, anche se proviamo a fare un mockup del mondo (la prima immagine), abbiamo bisogno di lavorare su un’unità di misura per dare un senso allo scenario. Per farlo, quindi, potremo assumere che Bob è alto mezza unità (quindi i blocchi sono 1×1), oppure potremmo utilizzare i metri affermando che i blocchi sono 4×4 (quindi Bob sarebbe alto 2 metri), insomma, il tutto dipende dalla nostra visione del mondo che vogliamo costruire.

Tra l’altro, tutte queste considerazioni iniziali sono molto importanti poiché ci aiuteranno a sviluppare al meglio scenari, attori, le loro caratteristiche e altro ancora. Inizieremo a costruire il mondo (Block.java e World.java) e Bob (Bob.java) nella prossima lezione. Per qualunque dubbio potete commentare l’articolo.