Realizzare Puzzle Bobble (Bust a Move) [4 di ?]

Oggi gestiremo la collisione tra le Sfere in movimento e il gruppo di sfere in alto.

Anche se non abbiamo ancora un”cannone spara bolle” possiamo continuare a muovere le sfere utilizzando il Mouse, ma il meccanismo utilizzato per intercettare la collisione tra la Sfera in movimento e le Sfere già collegate al soffitto sarà la stessa.

Ci sono moltissimi approcci possibili per gestire la collisione in un gioco, abbiamo già affrontato l’argomento nell’ultima lezione per realizzare Asteroids.

Anche questa volta cercheremo di utilizzare una soluzione immediata senza complicarci la vita, utilizzando soltanto Metodi già disponibili: la mia scelta ricade nuovamente su hitTestPoint.

Naturalmente, una Sfera ha un raggio maggiore di Zero, prima di poter utilizzare un singolo Punto per intercettare la Collisione con la Griglia in alto, dobbiamo apportare qualche modifica.

Considerazioni sull'uso di un singolo Punto per intercettare la collisione di una Sfera - 1

Considerazioni sull’uso di un singolo Punto per intercettare la collisione di una Sfera – 1

Nell’immagine qui sopra potete vedere i diversi elementi che dobbiamo controllare affinché la collisione sia correttamente intercettata. La linea trattegiata è il contorno dello Sprite protagonista del controllo di collisione, il pallino blu rappresenta il Punto che andrà a collidere con lo Sprite.

Considerazioni sull'uso di un singolo Punto per intercettare la collisione di una Sfera - 2

Considerazioni sull’uso di un singolo Punto per intercettare la collisione di una Sfera – 2

Purtroppo un Punto non ha dimensioni, così non è possibile intercettare correttamente la collisione della Sfera con lo Sprite superiore. Se la Sfera segue la traiettoria rappresentata dalla linea tratteggiata blu non sarà in grado di intercettare alcuna collisione, quindi il nostro lavoro non funzionerà.

Considerazioni sull'uso di un singolo Punto per intercettare la collisione di una Sfera - 3

Considerazioni sull’uso di un singolo Punto per intercettare la collisione di una Sfera – 3

La soluzione che ho pensato di adottare consiste nell’aumentare lo spessore della zona perimetrale dello Sprite, in questo modo la collisione sarà intercettata per un’area maggiore.

Considerazioni sull'uso di un singolo Punto per intercettare la collisione di una Sfera - 4

Considerazioni sull’uso di un singolo Punto per intercettare la collisione di una Sfera – 4

Come si vede nell’immagine qui sopra la zona in cui la collisione viene intercettata è molto larga. Visto che abbiamo a che fare con oggetti circolari, questo trucco ci permette di avere una corretta gestione delle collisioni con il minimo sforzo.

La modifica necessaria riguarda solo una piccola parte di codice, da aggiungere all’interno della Classe Sphere, all’interno del Metodo Costruttore, che diventa così:

public function Sphere(c:String = '000000', d:uint = 30) {
    color = c;
    diameter = d;
    /// Disegno la parte non visibile
    this.graphics.beginFill(0x000000,0);
    this.graphics.drawCircle(0,0,diameter*0.8); /// 0.8 perché voglio lasciare un margine di errore.
    this.graphics.endFill();
    /// Disegno la parte visibile
    this.graphics.beginFill(parseInt('0x'+color),1);
    this.graphics.drawCircle(0,0,diameter/2);
    this.graphics.endFill();
 }

Questo fa in modo che attorno ad ogni Cerchio ci sia un altro cerchio, invisibile, grande quasi il doppio.

Una volta che abbiamo il perimetro “allargato” non ci rimane che gestire la collisione all’interno della Classe Main utilizzando il già noto hitTestPoint per ottenere un risultato simile a quello che segue (in cui ho mantenuto la visibilità dell’area di collisione per permettervi di prevederne il comportamento):

No flash, please!

Purtroppo Adobe Flash Player non è più benvoluto come una volta, per questo motivo ho disabilitato tutte le applicazioni Flash presenti sul sito. Se vuoi puoi comunque scaricare il file SWF che si trovava qui, clicca qui per far partire il download

Come sempre i sorgenti degli articoli sono a vostra disposizione.

Inserisci nome e indirizzo email per iscriverti alla mia newsletter e ricevere il file immediatamente.
In breve: i dati inseriti in questo modulo saranno utilizzati per inviarti il link per scaricare il file che desideri, saranno conservati da un servizio esterno che si chiama MailChimp e in qualsiasi momento potrai cancellare la tua iscrizione al seguente link: https://danielealessandra.us7.list-manage.com/unsubscribe?u=546bebc381e525372d2120083&id=326af7d230.

Puoi leggere l'informativa completa cliccando sul link Privacy Policy che trovi dovunque su questa pagina, e comunque visitando in qualsiasi momento l'indirizzo https://www.danielealessandra.com/privacy-policy/
Ho letto e accetto l’informativa sulla privacy.

 

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.