This is a discussion on Trigonometria con Actionscript 3.0 esempio 4 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Ecco un altro esempio che prosegue nel tema della trigonometria applicata ad Actionscript.
Lato codice, niente che non sia già ...
Ecco un altro esempio che prosegue nel tema della trigonometria applicata ad Actionscript.
Lato codice, niente che non sia già stato pubblicato in questo blog.
' Attacco ' delle MovieClip in runtime come nell' articolo ex attachMovie alle quali applico della trigonometria che abbiamo già visto nel primo articolo Trigonometria applicata ad Actionscript 3.0.
Ne nasce un simpatico effetto ed è inutile dire che chi più ne ha più ne metta ! ( di fantasia ) :))
Creo un FLA, che salvo con nome ' trigonometria_4.fla ', al cui interno creo una MovieClip assegnandogli il nome di ' mc_triangolo '.
Click destro su ' mc_triangolo ' in libreira e gli assegno come identificatore Triangolo ( una classe che sto per scrivere ).
Creo la Document Class, un file AS che salvo con nome ' Trigo4.as ', implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class Trigo4 extends MovieClip
{
public var container_mc:MovieClip;
private var timer:Timer;
public function Trigo4()
{
init();
}
private function init():void
{
stage.frameRate=31;
createContainer();
goTimer();
}
private function createContainer():void
{
container_mc=new MovieClip();
addChild(container_mc);
}
private function goTimer():void
{
timer=new Timer(20,0);
timer.addEventListener(TimerEvent.TIMER,attachClip);
timer.start();
}
private function attachClip(t:TimerEvent):void
{
var triangolo:Triangolo=new Triangolo(this);
container_mc.addChild(triangolo);
}
}
}
Adesso creo la classe Triangolo, un file AS che salvo con nome ' Triangolo.as ' :
Code:
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class Triangolo extends MovieClip
{
private var Root:MovieClip;
private var speed:Number;
public function Triangolo(m:MovieClip)
{
Root=m;
init();
}
private function init():void
{
speed=2+Math.random()*20;
x=-width;
y=Math.random()*Root.stage.stageHeight;
alpha=speed/20;
scaleX=.5+speed/20;
scaleY=scaleX;
addEventListener(Event.ENTER_FRAME,go);
}
private function go(e:Event):void
{
x+=speed;
var dx:Number=x-Root.mouseX;
var dy:Number=y-Root.mouseY;
var radianti:Number=Math.atan2(dy,dx);
rotation=(radianti/Math.PI)*180;
if(x>=Root.stage.stageWidth+width)
{
removeEventListener(Event.ENTER_FRAME,go);
Root.container_mc.removeChild(this);
}
}
}
}
Analizziamo il codice
Classe Trigo4
Proprietà
una MovieClip che funge da contenitore di tutte le altre MovieClipche ' attaccherò '
public var container_mc:MovieClip;
un timer
private var timer:Timer;
Metodi
init();
imposto una velocità di frame rate
stage.frameRate=31;
chiamo il metodo createContainer()
createContainer();
chiamo il metodo goTimer()
goTimer();
createContainer();
istanzio container_mc come nuova MovieClip
container_mc=new MovieClip();
aggiungo container_mc al DisplayObject ( altrimenti non sarebbe visibile )
addChild(container_mc);
goTimer();
istanzio un nuovo timer passandogli i valori : 20 come velocità dell'intervallo e 0 come infinito
timer=new Timer(20,0);
aggiungo un listener al timer che all'evento TIMER chiama la funzione attachClip()
timer.addEventListener(TimerEvent.TIMER,attachClip );
faccio partire il timer
timer.start();
attachClip();
istanzio la classe Triangolo, pasandogli il valore this ( in questo caso è riferito alla ex _root di Actionscript 2.0 )
var triangolo:Triangolo=new Triangolo(this);
dato che la classe Triangolo estende la classe MovieClip, aggingo l'istanza della classe Triangolo ( triangolo ) al DisplayObject o non sarebbe visibile
container_mc.addChild(triangolo);
Classe Triangolo
Proprietà
una variabile MovieClip a cui assegno ( nella funzione costruttrice ) il valore della root che arriva dalla classe Trigo4
private var Root:MovieClip;
una variabile numerica
private var speed:Number;
Metodi
init();
assegno alla variabile speed un valore random tra il 2 e il 20 ( escluso )
speed=2+Math.random()*20;
assegno alla proprietà x ( dato che siamo all' interno di triangolo_mc che abbiamo nella libreria di trigonometria_4.fla, x=... è riferito a lei, quindi ad ogni istanza di Triangolo.as che la classe Trigo4 crea ) il valore negativo del width
x=-width;
assegno alla proprietà y un numero random che va da 0 alla massima altezza dello Stage
y=Math.random()*Root.stage.stageHeight;
assegno alla proprietà alpha un valore pari al valore di speed meno 20
alpha=speed/20;
assegno alla proprietà scaleX un valore pari a 0,5 + il valore di speed diviso 20
scaleX=.5+speed/20;
imposto laproprietà scaleY uguale ascaleX
scaleY=scaleX;
aggiungo unintervallo ENTER_FRAME che chiama la funzione go ( tante volte al secondopari al numero del frame rate )
addEventListener(Event.ENTER_FRAME,go);
go();
incremento la x del valore di speed
x+=speed;
applico la trigonometria di base vista nell' articolo :Trigonometria con Actionscript 3.0 [esempio 1]
var dx:Number=x-Root.mouseX;
var dy:Number=y-Root.mouseY;
var radianti:Number=Math.atan2(dy,dx);
rotation=(radianti/Math.PI)*180;
se la x è maggiore della largezza dello Stage più il width di questa clip
if(x>=Root.stage.stageWidth+width)
{
fermo l' intervallo di questa clip
removeEventListener(Event.ENTER_FRAME,go);
vi ricordate container_mc ? Gli dico di eliminare questa clip
Root.container_mc.removeChild(this);
}