Ciao a tutti !
Eccoci al quarto appuntamento con le basi di Actionscript 3.0 .
Dopo aver visto le
variabili, i
cicli e gli
Array, questa volta vorrei introdurre le funzioni.
Le funzioni possono essere estremamente complesse e non è il fine di questo tutorial.
Lo scopo del tutorial è di dare una infarinatura generale a chi è al primo approcio con Actionscript facendo sì da avere le basi necessarie per incrementare le proprie potenzialità.
Vediamo cosa sono, come si dichiarano e a cosa servono le funzioni ...
Le funzioni sono un set istruzioni di codice che vengono eseguite al momento in cui vengono chiamate.
Sono quindi porzioni di codice in forma stand-alone, cioè che possono eseguire il codice senza l' ausilio di altri componenti.
Le funzioni sono composte da:
- identificatore
- parametri
- parametri di restituzione
Possono essere chiamate da diversi punti del nostro script ( o meglio dire della nostra applicazione ) utilizzando l' identificatore e l' operatore parentesi ().
Funzione semplice
Vediamo come definire una semplice funzione
Code:
function flep():void
{
trace('ok');
}
function - dichiaro a Flash una funzione
flep() - è l' idenficatore della funzione ( in modo da poterla poi chiamare, quindi è come se fosse il nome della funzione ) e le parentesi tonde che al momento non contengono nessun parametro ( li vedremo dopo )
:void - fa sapere a Flash che la funzione non restituisce alcun parametro-valore ( il :void non è obbligatorio ma è consigliato in modo da abituarsi subito all' idea che una funzione può resituire dei valori )
il codice tra le parentesi graffe è il codice che veràà eseguito da Flash al momento in cui la funzione viene chiamata. Infatti se in questo momento pubblico l' SWF, non verrebbe eseguito alcun codice in quanto appunto la funzione non è stata chiamata.
Come chiamare la funzione flep ?
In questo modo:
Code:
function flep():void
{
trace('ok');
}
flep();
e cioè utilizzando l' identificatore e l' operatore parentesi.
All' interno della funzione c'è un comando e verrà eseguito da Flash. Infatti, pubblicando l' SWF ottengo il seguente output:
ok
Facciamo ora un esempio concreto utilizzando una MovieClip.
Creo una MovieClip di qualsiasi forma e, dopo averla trascinata sullo stage dalla libreria, gli assegno il nome clip_mc.
La posiziono a mano nell' angolo sinistro in alto dello stage.
Ora voglio spostare clip_mc a delle determinate coordinate x e y sullo stage.
Per farlo, mi creo una funzione che chiamo spostaClip in questo modo:
Code:
function spostaClip():void
{
clip_mc.x=300;
clip_mc.y=250;
}
e la richiamo in questo modo:
A questo punto, pubblico l' SWF e noto che la MovieClip si è sposata alle coordinate descritte nel codice tra le paremtesi graffe della funzione spostaClip.
Altro esempio di funzione semplice:
Code:
var fiore:String;
function assegnaNome():void
{
fiore='margherita';
}
assegnaNome();
trace(fiore);
Ho creato una variabile di nome fiore e di tipo String.
Ho creato una funzione con nome assegnaNome e tra le sue graffe assegno un valore alla variabile fiore.
Chiaramente se pubblicassi ora l' SWF, la variabile fiore rimarrebbe senza valore in qunto la funzione assegnaValore ( cha appunto assegnerebbe il valore alla variabile fiore ) non è stata chiamata.
Quindi chiamo assegnaFiore() e subito dopo dico a Flash ( tramite il comando trace ) di fari vedere il valore che contiene la variabile fiore. Flash mi dice:
margherita
Funzione che riceve parametri
Come ho detto in precedenza, una funzione Actionscript può ricevere dei parametri.
La ricezione di parametri è fondamentale in quanto la funzione stessa potrebbe eseguire il codice che contiene in base al valore dei parametri che gli sono stati inviati.
Vediamo il primo esempio
Code:
var sezione:int=10;
function moltiplica(n:int):void
{
sezione=sezione*n;
}
moltiplica(5);
trace(sezione);
Ho creato una variabile con nome sezione, di tipo int ( numero intero ) e gli ho assegnato il valore 10.
Ho creato una funzione che si chiama moltiplica e tra le parentesi tonde gli ho assegnato un parametro che prenderà il nome n e sarà di tipo int.
La funzione moltiplicherà il valore della variabile sezione per il valore che gli passerò come parametro.
Quindi, dicendo sezione=sezione*n; significa: il nuovo valore di sezione è lo stesso valore che contiene sezione, moltiplicato per n.
Chiamo la funzione pasandogli un parametro ( deve essere un valore di tipo int, quindi numero intero, altrimenti Flash ci darebbe un errore ). In questo caso gli passo 5.
Chiedendo a Flash di farmi vedere il nuovo valore di sezione, ottengo il seguente output:
50
Faccio ora un esempio utilizzando la MovieClip che ho sullo stage ( clip_mc ).
creo una funzione che sposterà la MovieClip alle coordinate che gli passerò come parametri.
Code:
function sposta(cx:Number,cy:Number):void
{
clip_mc.x=cx;
clip_mc.y=cy;
}
sposta(200,200);
in questo caso ho implementato 2 parametri in ricezione alla funzione sposta e li assegno rispettivamente alla x e alla y di clip_mc.
Infatti pubblicando l' SWF ci accorgiamo che clip_mc si è spostata a tali coordinate.
Funzione che restituisce un valore
Una funzione Actionscript può anche restituire un valore.
Fino ad ora ho utilizzato :void per dire a Flash che la funzione non restituisce alcun valore.
Se cambiassi il :void con ad esempio :Number, significherebbe che tale funzione restituisce un valore di tipo Number.
Vediamo
Code:
var persone:Number;
function raddoppia(n:Number):Number
{
return n*2;
}
persone=raddoppia(23);
trace(persone);
dichiaro una variabile con nome persone di tipo Number.
Creo la funzione raddoppia che vuole un parametro di tipo Number e restituisce un parametro di tipo Number.
Con l' operatore return, dico a Flash di restituire il valore di n ( che è il valore che la funzione riceve ) moltiplicato per 2.
Assegno direttamente alla variabile persone il valore restituito dalla funzione raddoppia: persone=raddoppia(23);
Infatti eseguo un trace di persone subito dopo ed ottengo il seguente output:
46
In sostanza, dire raddoppia(23); è come dire 46.
Infatti se eseguissi trace(raddoppia(23)); l' output sarebbe appunto 46.
Facciamo un esempio con una MovieClip.
Creo una funzione che ogni qual volta chiamata mi restituisce una MovieClip a forma di cerchio
Code:
function creaClip(raggio:Number):MovieClip
{
var clip:MovieClip=new MovieClip();
clip.name='clip';
clip.graphics.beginFill(0xFF0033,1);
clip.graphics.drawCircle(300,300,raggio);
clip.graphics.endFill();
return clip;
}
addChild(creaClip(50));
Creo una funzione con nome creaClip che vuole un parametro di tipo Number e restituisce una MovieClip.
All' interno della funzione, creo una variabile con nome clip di tipo MovieClip e la istanzio, cioè creo una nuova MovieClip utilizzando l' operatoe new. Assegno un nome alla MovieClip. Faccio disegnare a clip un cerchio che prenderà posizione x 300 e y 300 e con un raggio in base al valore del parametro raggio.
Restituisco clip.
In questo caso si può ben capire che la funzione restituisce una MovieClip fisicamente esistente, infatti dico a Flash di aggiungerla allo stage tramite il metodo addChild in questo modo
addChild(creaClip(50);
Infatti se eseguissi, trace(creaClip(50)); otterrei il seguente output
[object MovieClip]
e se eseguissi trace(creaClip(50).name); otterrei:
clip
File: