A recipe of: Flappy birds! – (Finalmente gli Sprites!)

Flappy Birds, Il gioco (sprites)!

Con questo sesto tutorial, andremo a settare a spostare il nostro “bird” in una classe sprite che andremo a creare.

 

Ingredienti:

 

Riprendiamo!

Eravamo rimasti con l’apprendere l’utilizzo  dei Viewport tramite una camera, ora, andiamo a settare la classe astratta sprite e spostiamo la texture del nostro uccello dentro la classe Bird che andremo a creare.

 

La classe Sprite

In Flappy Birds avremo bisogno principalmente di due sprites, uno che sara’ quello che conterra’ il protagonista, un’altro che conterra’ gli ostacoli di gioco.

Prima di andare a creare la classe sprite, creiamo come abbiamo fatto per gli stati una cartella/package per essi, e andiamo a crearci all’interno una nuova java class “sprite”.

structure

 

Configurazione della classe Sprite

Ora abbiamo creato la classe sprite, ma cosa dobbiamo metterci all’interno?

Come prima cosa dobbiamo ricordarci che la classe sprite sara’ una classe d’appoggio per gli sprite veri e propri, e di conseguenza dobbiamo andarla a settare come classe astratta

public abstract class Sprite {
}

E andiamo a pensare di cosa avra’ bisogno il nostro sprite.

In generale tutti i nostri sprite conterranno delle coordinate, e in quanto stiamo progettando un gioco a due dimensioni, esse possono essere rappresentate all’interno di un vettore a due dimensioni, andiamo quindi a implementarle e a settarle nel costruttore..

public abstract class Sprite {

    protected Vector2 posizione;
    protected Texture texture;

    public Sprite(int x,int y){
        posizione = new Vector2(x,y);
    }

In generale per il nostro protagonista, avremo bisogno anche di una velocita’, ma e’ un attributo generico per tutti gli sprites? La risposta e’ ovviamente no, se andiamo a considerare gli ostacoli anch’essi come sprites, allora non avrebbe senso andare ad assegnare a loro una velocita’.

Unica cosa di cui abbiamo bisogno, e’ una classe update, con la quale andare ad aggiornare lo sprite a seconda di cosa accada, andiamo quindi a implementarla:

public abstract void update(float dt);

Fatto cio’ possiamo andare a considerare conclusa la nostra classe astratta per gli sprite.

spritesupdate

 

La classe Bird

Definita la nostra classe sprite, possiamo andare finalmente a creare la classe che conterra’ il protagonista del nostro gioco: l’uccello.

Andiamo quindi, a creare una nuova java class all’interno di sprites di nome Bird, che estendera’ la classe Sprite.

public class Bird extends Sprite {

Come al solito, visto che stiamo andando a estendere un’altra classe, dobbiamo anche implementarne i suoi metodi.

Una volta implementati dobbiamo chiederci cosa ha di piu’ il nostro protagonista rispetto alla semplice classe sprite?

La prima cosa che ci puo’ venire in mente e’ sicuramente la velocita’, quindi andiamola a creare, ricordandoci che avra’ una velocita’ sia nell’asse delle x che delle y, e che quindi pure questa sara’ possibile rappresentarla tramite un vettore contenente due parametri.

Per comodita’, settiamo la velocita’ iniziale a 0

public class Bird extends Sprite {

    private Vector2 velocita;

    public Bird(int x, int y) {
        super(x, y);
        velocita = new Vector2(0,0);
    }

E ora iniziamo a ragionare da cosa essa sara’ influenzata.

Il nostro uccello, sara’ influenzato sia dalla forza di gravita’ sia dalla pressione su schermo, la forza di gravita’ tendera’ a portarlo in basso, mentre la pressione tenderla a fargli riprendere quota.

Quindi possiamo andare a definire una costante di gravita’, sarebbe meglio definirla dentro la classe sprite, ma in flappy birds, l’unico elemento influenzato da essa e’ il protagonista, quindi per ora andremo a settarla li e magari a spostarla piu’ avanti a seconda delle esigenze.

public static final int GRAVITY = -10;
private Vector2 velocita;

public Bird(int x, int y) {
    super(x, y);
    velocita = new Vector2(0,0);
}

Ognuno la puo’ settare con un valore che ritiene opportuno, quel -10 sta solo a indicare la “velocita’” di caduta del nostro protagonista.

Quello che vogliamo fare ora e’ aggiungere la forza di gravita’ alla velocita’ e dovremo cambiare la posizione del nostro corpo, in modo tale da poter simulare una caduta.

public void update(float dt) {
    velocita.add(0,GRAVITY);
    velocita.scl(dt);
    posizione.add(0,velocita.y);
    velocita.scl(1/dt);
}

Come ultima cosa, dobbiamo andare ad assegnare la texture alla nostra classe, e ricordarci di andarla a rimuovere di conseguenza nello stato di gioco.

public Bird(int x, int y) {
    super(x, y);
    texture = new Texture("flappybird.png");
    velocita = new Vector2(0,0);
}

Andando a modificare lo stato di gioco

Nella classe stato di gioco ora dovremo rimuovere i riferimenti all’uccello, e andarci ad aggiungere la nostra nuova variabile “bird”.

statogiocomodificato

Ora, nello stato di gioco, dobbiamo andare a gestire gli input da tastiera, e quindi richiamarli nell’update, e andare anche a fare l update del nostro protagonista.

Quindi:

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

}

Ora, per renderizzare sullo schermo il nostro bird, dobbiamo passare al nostro stato di gioco, la sua texture, quindi, torniamo nella classe sprite clicchiamo con il tasto destro sul costruttore, andiamo su generate e generiamo i due getter che ci propone.

spritegetter

 

Facciamo la stessa cosa nella classe bird, per quanto riguarda la velocita’ e implementiamo i due metodi mancanti della classe astratta sprite.

 

birdgetter

 

Fatto cio’ torniamo alla nostra classe dello stato di classe e nel render, passiamogli la texture e la posizione del nostro uccello.

@Override
public void render(SpriteBatch spriteBatch) {
    spriteBatch.setProjectionMatrix(camera.combined);
    spriteBatch.begin();
    spriteBatch.draw(bird.getTexture(),bird.getPosizione().x,bird.getPosizione().y);
    spriteBatch.end();
}

I nostri tre file, dovranno ora apparire cosi(potete aprire questi file tramite il blocco note):

bird

sprite

statogioco

Se andate a testare l’applicazione, vedrete che all’accesso allo stato di gioco, il vostro uccello cadra’ fuori dallo schermo attratto dalla forza di gravita’.

Nel prossimo tutorial implementeremo i click per poterlo tenere “a galla”.

 

 

 

Saluti dal vostro nabbo Developer

Marco Tamagno

Facebook

Google+

Rispondi