This is a discussion on Teorema diPitagora - collisione tra due MovieClip within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Eccoci al secondo appuntamento con il teorema di Pitagora.
Consiglio di leggere la prima parte di questo articolo in modo ...
Eccoci al secondo appuntamento con il teorema di Pitagora.
Consiglio di leggere la prima parte di questo articolo in modo da poter meglio concepire quanto andrò a dimostrare.
Nella prima parte abbiamo visto come calcolare la distanza reale tra due oggetti.
Ora scopriremo come controllare una collisione tra oggetti con il teorema di Pitagora.
Molti di voi sicuramente penseranno: ' che senso ha calcolare Pitagora per controllare una collisione quando ho a disposizione il metodo hitTestObject ? '
Per eseguire collisioni semplici, hitTestObject rimane un ottimo metodo. Per collisioni molto più complesse e soprattutto nello sviluppo di video giochi con Flash, Pitagora rimane indiscutibile.
Vediamo l' esempio...
Creo un FLA, che salvo con nome ' collisione_pitagora.fla ' al cui interno creo due MovieClips alle quali assegno nomi istanze ' ball_0_mc ' e ' ball_1_mc ' .
Creo la Document Class, un fila AS che salvo con nome ' Collisione.as ', implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class Collisione extends MovieClip
{
public function Collisione()
{
init();
}
private function init():void
{
stage.frameRate=31;
ball_0_mc.x=0;
ball_1_mc.x=stage.stageWidth;
this.addEventListener(Event.ENTER_FRAME,go);
}
private function go(e:Event):void
{
var x:Number=ball_0_mc.x-ball_1_mc.x;
var y:Number=ball_0_mc.y-ball_1_mc.y;
var distance:Number=Math.sqrt(x*x+y*y);
if(distance<=ball_0_mc.width)
{
this.removeEventListener(Event.ENTER_FRAME,go);
trace('stop');
}
else
{
ball_0_mc.x++;
ball_1_mc.x--;
}
}
}
}
Analizziamo il codice
Metodi
init();
imposto la velocità del frame rate
stage.frameRate=31;
posiziono le MovieClips
ball_0_mc.x=0;
ball_1_mc.x=stage.stageWidth;
aggiungo un intervallo ENETR_FRAME
this.addEventListener(Event.ENTER_FRAME,go);
go();
applico il teorema di Pitagora come già visto in questo articolo
var x:Number=ball_0_mc.x-ball_1_mc.x;
var y:Number=ball_0_mc.y-ball_1_mc.y;
var distance:Number=Math.sqrt(x*x+y*y);
se la distanza è minore del width di ball_0_mc ( questo perchè le MovieClips hanno il punto di registrazione al centro )
if(distance<=ball_0_mc.width)
{
rimuovo l' intervallo e faccio un trace che mi avvisa
this.removeEventListener(Event.ENTER_FRAME,go);
trace('stop');
}
altrimenti muovo le due MovieClips una verso l' altra
else
{
ball_0_mc.x++;
ball_1_mc.x--;
}