A recipe of: Flappy birds! – (Ostacoli di gioco, i tubi)

Con questo Tutorial Andremo a mettere gli ostacoli nel gioco.

 

Ingredienti:

 

La classe ostacoli

In flappy bird, i nostri ostacoli saranno rappresentati dai dei tubi, che dovremo andare a schivare per non morire.

Possiamo rappresentare questi tubi con una classe, “ostacoli”.

Andiamo quindi a creare la classe:

kk

 

In Flappy Bird avremo 2 tubi, piu’ o meno disposti sempre nello stesso modo uno che verra’ dall’alto e un’altro che verra’ dal basso, lasciando sempre uno spazio in mezzo per passare.

 

Implementando i Tubi

Andiamo quindi a creare dentro la classe  ostacoli, due Texture, una per il tubo superiore e un’altra per il tubo inferiore, e andiamo ad assegnargli le relative immagini.

public class Ostacoli {
    private Texture TuboSuperiore, TuboInferiore;
    
    public Ostacoli(int x) {
        TuboSuperiore = new Texture("TuboSuperiore.png");
        TuboInferiore = new Texture("TuboInferiore.png");
    }

Oltre ad avere una Texture, i nostri ostacoli avranno bisogno di una posizione la quale, sara’ random nell asse delle y, in modo tale, da poter creare i tubi in diverse altezze, e creare diversi tipi di spazi tra i due tubi. quindi, andiamo a implementare queste due variabili.

public class Ostacoli{
    private Texture TuboSuperiore, TuboInferiore;
    private  Vector2 posizioneSuperiore, posizioneInferiore;
    private Random rand;

    public Ostacoli(int x) {
        TuboSuperiore = new Texture("TuboSuperiore.png");
        TuboInferiore = new Texture("TuboInferiore.png");
        rand = new Random();

        posizioneSuperiore = new Vector2(x, rand.nextInt(150)+ 100 + 110);
        posizioneInferiore = new Vector2(x, posizioneSuperiore.y - 150 - TuboInferiore.getHeight());
    }

Ovviamente parlando di coordinate 2D la posizione dei due tubi sara’ rappresentata da un Vector2, e dovremmo farla oscillare in modo randomico nell’altezza.

Entrambi i tubi si dovranno trovare nella stessa posizione nell’asse delle x in modo tale da lasciare dei “cunicoli” nei quali il nostro uccello potra’ passare.

La posizione nell’asse delle y invece, dovra’ essere “randomica”, ma dovremmo sempre ricordarci di lasciare un po’ di spazio tra i due tubi “per questo le somme dopo i random” in modo tale da non creare ostruzioni nelle quali il nostro bird non potra’ passare.

Implementata la posizione, andiamo a implementare i getter per le texture e le due posizioni.

 

public Texture getTuboSuperiore() {
    return TuboSuperiore;
}

public Texture getTuboInferiore() {
    return TuboInferiore;
}

public Vector2 getPosizioneSuperiore() {
    return posizioneSuperiore;
}

public Vector2 getPosizioneInferiore() {
    return posizioneInferiore;
}

 

Aggiungiamo i tubi nello stato di gioco

Ora che abbiamo creato la nostra classe, rappresentante gli ostacoli “i tubi” che daranno noie al nostro protagonista, dobbiamo aggiungerli nella nostra schermata di gioco.

Andiamo quindi a implementare i tubi nella nostra classe “StatoGioco” per ora, in una posizione fissa, per vedere come ci appariranno in schermo.

 

public class StatoGioco extends Stato {
    private Bird bird;
    Texture sfondo;
    private Ostacoli ostacoli;

    public StatoGioco(GameStateManager gsm) {
        super(gsm);
        bird = new Bird (30,150);
        sfondo = new Texture("sfondo.jpg");
        camera.setToOrtho(false,FlappyBirdsGame.LARGHEZZA/2,FlappyBirdsGame.ALTEZZA/2);
        ostacoli = new Ostacoli(150);
    }

Una volta implementati, andiamo a disegnarli nella nostra funzione render:

public void render(SpriteBatch spriteBatch) {
    spriteBatch.setProjectionMatrix(camera.combined);
    spriteBatch.begin();
    spriteBatch.draw(sfondo,camera.position.x - (camera.viewportWidth / 2),0,FlappyBirdsGame.LARGHEZZA / 2,FlappyBirdsGame.ALTEZZA / 2);
    spriteBatch.draw(bird.getTexture(),bird.getPosizione().x,bird.getPosizione().y);
    spriteBatch.draw(ostacoli.getTuboSuperiore(),ostacoli.getPosizioneSuperiore().x,ostacoli.getPosizioneSuperiore().y);
    spriteBatch.draw(ostacoli.getTuboInferiore(),ostacoli.getPosizioneInferiore().x,ostacoli.getPosizioneInferiore().y);
    spriteBatch.end();
}

Fatto questo, possiamo lanciare il gioco e vedere come ci appaiono sullo schermo, teoricamente, a ogni lancio, grazie alla variabile randomica, i nostri tubi saranno disposti in un’altezza differente.

ostacoli

 

 

 

Saluti dal vostro nabbo Developer

Marco Tamagno

Facebook

Google+

Rispondi