Salve !
Abbiamo visto diverse tecniche di come
applicare la trigonometria ad Actionscrpt 3.0
Con questo tutorial, vedremo come gestire il movimento rotatorio di una MovieClip e la direzione del movimento.
Chiaramente farò un esempio puramente didattico e come sempre dipenderà da noi stessi trovare un' applicazione pratica.
Più fantasia e doti grafiche si hanno, più potrebbe servirvi applicare queste semplici formule trigonometriche.
Vediamo...
Creo un FLA che salvo con nome ' trigonometria6.fla '.
Al suo interno creo una MvoieClip di forma circolare, la trascino sullo stage e gli assegno nome istanza ' clip_mc '.
Su un altro livello, che chiamerò code, appico Actionscript in questo modo:
Code:
stage.frameRate=24;
clip_mc.addEventListener(Event.ENTER_FRAME,rotate);
function rotate(evt:Event):void
{
var angle:Number=(mouseX-stage.stageWidth/2)*.001;
var sine:Number=Math.sin(angle);
var cosine:Number=Math.cos(angle);
var xx:Number=evt.target.x-stage.stageWidth/2;
var yy:Number=evt.target.y-stage.stageHeight/2;
var x1:Number=cosine*xx-sine*yy;
var y1:Number=sine*xx+cosine*yy;
evt.target.x=stage.stageWidth/2+x1;
evt.target.y=stage.stageHeight/2+y1;
}
con il conseguente risultato ( muovere il mouse sull' SWF ):
Analizziamo il codice
imposto una velocità di frame rate
stage.frameRate=24;
aggiungo ENTER_FRAME a clip_mc
clip_mc.addEventListener(Event.ENTER_FRAME,rotate) ;
function rotate(evt:Event):void
{
creo una variabile numerica con nome angle che prenderà il valore di un angolo dato dalla differenza tra la posizione X del mouse e la metà della larghezza dello stage, tutto moltiplicato per 0.001 ( altrimenti sarebbe troppo veloce ( se il valore risultasse negativo, ecco che avviene il cambio di direzione del movimento rotatorio di clip_mc )
var angle:Number=(mouseX-stage.stageWidth/2)*.001;
creo due variabili numeriche alle quali assegno rispettivamente il valore del seno e del coseno dell' angolo appena citato
var sine:Number=Math.sin(angle);
var cosine:Number=Math.cos(angle);
creo una variabile numerica alla quale assegno il valore della differenza tra la posizione X di clip_mc e la metà della larghezza dello stage
var xx:Number=evt.target.x-stage.stageWidth/2;
creo una variabile numerica alla quale assegno il valore della differenza tra la posizione Y di clip_mc e la metà dell' altezza dello stage
var yy:Number=evt.target.y-stage.stageHeight/2;
Adesso utilizzo due formule che riguardano gli angoli opposti della trigonometria, precisamente il teorema del seno, che dice:
I lati di un triangolo sono proporzionali al seno degli angoli opposti.
creo una variabile numerica alla quale assegno il valore del coseno moltiplicato per xx ( differenza tra la posizione X di clip_mc e la metà della larghezza dello stage ) e gli sottraggo il valore del seno moltiplicato per yy ( differenza tra la posizione Y di clip_mc e la metà dell' altezza dello stage )
var x1:Number=cosine*xx-sine*yy;
ora faccio l' incontrario
var y1:Number=sine*xx+cosine*yy;
adesso do in pasto alla X di clip_mc il valore della metà della larghezza dello stage più il valore risultato dalla variabile x1
evt.target.x=stage.stageWidth/2+x1;
e alla Y di clip_mc il valore della metà dell' altezza dello stage più il valore risultato dalla variabile y1
evt.target.y=stage.stageHeight/2+y1;
}
Alla prossima & stay tuned !