A recipe of: Flappy birds! – (Stato di gioco e Transizioni)

Flappy Birds, Il gioco!

Con questo quarto tutorial, andremo a creare lo stato di gioco, e la transizione del Menu ad esso.

 

Ingredienti:

 

Riprendiamo!

flappybirdssfondopulsante

 

Avevamo finito l’ultimo tutorial aggiungendo la grafica al nostro stato di menu, e ora andando a testare

l’applicazione, dovremo ritrovarci nella schermata riportata qui a fianco.

Quello che andremo a fare oggi, sara’ rendere utile quel pulsante di play a centro delo schermo.

Faremo in modo tale che, andando a cliccare quel pulsante, si possa passare allo stato di gioco.

Per fare una corretta transizione da uno stato all’altro, da una schermata applicativa all’altra, e’ necessario ricordarsi sempre di andare a pulire, cancellando gli elementi, la schermata precedente.

Questo perche’, nel caso non lo facessimo, a ogni transizione quegli elemeneti rimarrebbero li, inutilizzati, andando sempliciemente a occupare inultimente delle memoria.

In quanto noi non amiamo di certo sprecare la memoria nella nostra ram, andremo ad aggiungere a ogni stato, la funzione dispose.

L’unica cosa che dovra’ fare questa funzione, sara’ fare il dispose di tutti gli elementi interni relativi allo stato.

 

La funzione dispose

Per aggiungere la funzione dispose, a ogni stato, ci basta andare a creare all’interno della classe astratta “Stato” la suddetta funzione.

public abstract void dispose();

Andiamo ad aggiungere la stringa sopra riportata, tra le altre funzioni astratte della classe stato, quindi andiamo a trovarci cosi, con la classe strutturata in questo modo:

statodispose

 

Fatto cio’ dobbiamo andare ad aggiungere la funzione dispose agli stati che abbiamo gia’ implementato, quindi, allo StatoMenu, unico stato che abbiamo fino ad ora creato.

Per fare cio’, apriamo lo stato menu e clicchiamo col tasto destro su “public class StatoMenu extends Stato”  andiamo su generate, clicchiamo su Implement methods, e aggiungiamo il metodo dispose.

Creata la funzione

@Override
public void dispose() {
    
}

Andiamo a dirgli cosa deve fare.

Quello che dovra’ fare questa funzione in questa classe, sara’ eliminare lo sfondo e il pulsante dalla nostra memoria.

Per fare cio’ ci basta richiamare il metodo dispose delle due texture, quindi

public void dispose() {
    sfondo.dispose();
    play.dispose();
}

La nostra classe MenuState, ora apparira’ cosi:

statomenudispose

Questa funzione, la andremo a richiamare a ogni transizione che faremo da uno stato all’altro.

 

Lo stato di gioco

Ora, andiamo a creare una nuova classe, lo stato di gioco, creiamola all’interno della cartella “Stati”.

cartelle

 

Una volta creata la classe, dobbiamo dirgli che estende la classe astratta Stato, come abbiamo fatto per la classe StatoMenu.

Quindi, andremo ad aggiungere la stringa extends Stato, e ne implementeremo i metodi.

 

Ora, vi dovreste ritrovare con una classe cosi costruita:

statogioco

Il nostro stato di gioco, dovra’ contenere, il nostro personaggio principale di gioco, l’uccello, quindi, se non l’avete ancora fatto, andate ad aggiungere la sua immagine tra gli assets del programma.

L’uccello sara’ ovviamente una Texture, quindi aggiungete una nuova texture e chimatela bird, e al suo interno, andate a mettere la sua immagine.

public class StatoGioco extends Stato {
    Texture bird;

    public StatoGioco(GameStateManager gsm) {
        super(gsm);
        bird = new Texture("flappybird.png");
    }

E ora, renderizziamo la texture al centro della schermata di gioco, quindi nella funzione render andiamo a scrivere:

public void render(SpriteBatch spriteBatch) {
    spriteBatch.begin();
    spriteBatch.draw(bird, FlappyBirdsGame.LARGHEZZA/2,FlappyBirdsGame.ALTEZZA/2);
    spriteBatch.end();
}

La transizione

playstateflappy

 

Creato lo stato di gioco, possiamo pensare finalmente al passaggio dallo stato menu ad esso.

 

Quello che vogliamo realizzare, e’ che al tocco dello schermo, nello stato menu, si passi allo stato di gioco.

 

Dovremo andare quindi a lavorare sulla funzione InputManager e update nello stato menu e configurare questa transizione.

 

Utilizzeremo la funzione update per poter richiamare a ogni frame la funzione InputManager, in modo tale da controllare ogni volta se e’ stato premuto un qualche pulsante.

 

Utilizzeremo invece la funzione InputManager, per dire all’applicazione come comportarsi all’avvenuta pressione di esso.

 

In codice, potremmo scriverlo cosi:

@Override
public void update(float deltaTime) {
InputManager();
}

@Override
protected void InputManager() {
    if(Gdx.input.justTouched()){
        gsm.set(new StatoGioco(gsm));
        dispose();
    }

}

Ora, se provate a lanciare il gioco, e provate a cliccare sullo schermo, vedrete che passarete dalo stato menu allo stato di gioco.

Nel prossimo tutorial parleremo di viewport, per andare a “vedere” un’ area specifica dello schermo.

 

 

Saluti dal vostro nabbo Developer

Marco Tamagno

Facebook

Google+

 

 

Rispondi