se la distanza tra il punto e il centro del cerchio è minore del raggio del cerchio, allora, il punto collide con il cerchio

Procedura:
1 - Calcolo la differenza tra la X del cerchio e la X del punto e così anche per la Y (lati A e B)
var xDiff:Number=cerchio._x-punto._x;
var yDiff:Number=cerchio._y-cerchio._y;
2 - Applico il teorema di pitagora per calcolare la distanza fra il centro del cerchio e il punto (lato C)
var distance:Number=Math.sqtr(xDiff*xDiff+yDiff*yDiff);
3 - Se la distanza è minore del raggio c'è collisione
Vediamo la collisione traducendola in un esempio:
istanziate nello stage 3 clip, un cerchio, istanza cerchio_mc e due punti, punto1_mc e punto2_mc
Posizionate uno dei due punti all'interno del cerchio, la'ltro all'esterno.
Questo il codice:
//creiamo 3 oggetti per memorizzare le proprietà dei mc. Usare gli oggetti ci consente di separare tali dati dall'interfaccia, in modo che possiamo cancellare i mc dallo stage senza perdere queste info, che possiamo ritilizzare in un sefcondo momento
//
var punto1:Object = {};
//la sintassi di cui sopra corrisponde a scrivere var punto1:Object=new Object();
punto1.x = punto1_mc._x;
punto1.y = punto1_mc._y;
punto1.name=punto1_mc._name;
//
var punto2:Object = {};
punto2.x = punto2_mc._x;
punto2.y = punto2_mc._y;
punto2.name=punto2_mc._name;
//
var cerchio:Object = {};
cerchio.x = cerchio_mc._x;
cerchio.y = cerchio_mc._y;
cerchio.radius = cerchio_mc._width/2;
//
//funzione che calcola la collisiohne
function collPuntoCerchio(punto:Object, cerchio:Object):Void {
var xDiff:Number = cerchio.x-punto.x;
var yDiff:Number = cerchio.y-punto.y;
var distance:Number = Math.sqrt(xDiff*xDiff+yDiff*yDiff);
if (distance < cerchio.radius) {
trace(punto.name+": collision detected!");
} else {
trace(punto.name+": no collision..");
}
}
//
collPuntoCerchio(punto1,cerchio);
//
collPuntoCerchio(punto2, cerchio);


0 commenti:
Posta un commento