giovedì 17 luglio 2008

[as2] Rilevare le collisioni con hitTest()

Il concetto chiave per comprendere l'utilizzo di hitTest() è il bounding box, ovvero il contorno di un movieclip

bounding box


Con il metodo htiTest() si possono rilevare 3 tipi di collisioni:

- Fra due movieClip

- Fra un movieClip e un punto

- Fra una forma e un punto



Collisioni fra due movieClip

Questo tipo di collisione avviene se i bounding box di 2 clip si intersecano, indipendentemente dal fatto che anche il contenuto di essi si "tocchi"

collisione tra due bounding box

myMovieClip.hitTest(targetMc)

Ecco un esempio:







con il relativo codice:


function inizia() {
this.onEnterFrame = function() {
forma2_mc._x = _xmouse;
forma2_mc._y = _ymouse;
if (forma2_mc.hitTest(forma1_mc)) {
test_txt.text="contatto"
} else {
test_txt.text="";
}
};
}
inizia();


Collisioni tra un movieClip e un punto

myMc.hitTest(x,y)

Questo tipo di collisione avviene quando un punto, identificato nello spazio attraverso le sue coordinate x e y, si trova nel bounding box di un mc.
Nell'esempio sottostante, quando il mouse si trova nel bounding box del clip (evidenziato con un riquadro grigio), facciamo partire una animazione:








il codice:


_root.onMouseDown = function() {
var mx = _xmouse;
var my = _ymouse;
if (balloon_mc.hitTest(mx, my)) {
balloon_mc.play();
}
};


Da notare come l'animazione parta anche cliccando al di fuori della forma ma dentro al riquadro o bounding box.

Collisioni tra una forma e un punto

myMc.hitTest(x,y,true);

L'aggiunta del parametro true consente di non considerare il bounding box, bensì un oggetto all'interno di un clip. Vediamo come cambia l'esempio precedente. Provate a cliccare in un'area fra la forma e il bounding box, non accadrà nulla. L'area interessata alla collisione è diventata la forma presente all'interno del clip:







il codice:

_root.onMouseDown = function() {
var mx = _xmouse;
var my = _ymouse;
if (balloon_mc.hitTest(mx, my, true)) {
balloon_mc.play();
}
};

0 commenti: