AS3 Class.ScaleSquare Porting

Ricompilazione della classe ScaleSquare in ActionScript 3

Inserito il 05-07-2007

Visto il positivo riscontro verso la mia classe personale ScaleSquare, scritta per Flash Mx 2004 e successivi, in ActionScript 2, ho deciso, un po' anche per imparare a gestire questo "nuovo" linguaggio, di fare il porting della classe in ActionScript 3.

Potete scaricare la classe dal link ../classes/AS3ScaleSquare.as

Effettivamente in AS3 tutto l'apparato di gestione degli script è stato profondamente modificato e, nonostante esistano ancora i costrutti classici della programmazione, ogni elemento precedente è stato spostato o sostituito con altri, utilizzando una modularizzazione a classi, tipica dei linguaggi Object Oriented.
Grazie a questa modularizzazione il codice appare più snello, ogni azione viene presa in carico da un singolo elemento, così avremo ad esempio una classe che si occupa solo dei caricamenti esterni, una che potrà contenere solo elementi disegnati, una che conterrà elementi di tipo bitmap e così via. E' chiaro a questo punto che il codice scritto a suo tempo per AS2 non possa più essere sfruttato nella nuova versione, fatto salvo il caso di pubblicare ancora per una versione precedente del Flash Player.

L'utilizzo della classe non cambia, se ne istanzia un nuovo oggetto sul frame specificandone i parametri che si vuole modificare.

// importo le easing functions, come facevo in AS2
// l'unica differenza è che le cerco in un package diverso (fl invece che mx)
import fl.transitions.easing.*;
// richiamo la classe attraverso il costruttore, con i suoi parametri
var s:AS3ScaleSquare = new AS3ScaleSquare(myDispObj, 5, 5, Bounce.easeOut, true, 1, 1);

Il costruttore della classe è così composto:

public function AS3ScaleSquare (target:DisplayObjectContainer=null, xSections:Number=1, ySections:Number=1, easeType:Function=null, random:Boolean=false, duration:Number=Infinity, singleTweenDuration:Number=1)

Di seguito i parametri, compresi del loro valore di default*:

Gli stessi parametri configurabili nel costruttore della classe, sono accessibili come proprietà dell'istanza, in modalità read/write, perciò possono essere sovrascritti con nuovi valori.

La classe prevede anche tre metodi, che riporto di seguito:

// attenzione: non è possibile attivare il metodo se il target non è stato definito
var ssq:AS3ScaleSquare = new AS3ScaleSquare();
ssq.target = myDispObj;
ssq.xSections = 10;
ssq.ySections = 1;
ssq.easeType = Bounce.easeOut;
ssq.startAnimation();
var ssq:AS3ScaleSquare = new AS3ScaleSquare();
ssq.addEventListener(Event.COMPLETE, completeHandler);
ssq.addEventListener(Event.CANCEL, cancelHandler);
function completeHandler(e:Event) {
	trace("Animazione completata!");
}
function cancelHandler(e:Event) {
	trace("Animazione interrotta!");
}
ssq.target = myDispObj;
ssq.xSections = 10;
ssq.ySections = 1;
ssq.easeType = Bounce.easeOut;
ssq.startAnimation();

Questo è quanto, la classe presenta qualche imperfezione, soffre della scarsa precisione dei metodi di controllo del tempo, tipici di Flash (setInterval e setTimeout, a cui si è aggiunta la classe Timer altrettanto imprecisa), ma nel complesso, se usata con oculatezza e non sovraccaricata da troppe sezioni, fa egregiamente il suo lavoro e la sua bella figura in presentazione. Le prestazioni generali sono migliori, grazie alla gestione di elementi ed eventi "donate" da AS3.

*:Con la nuova versione del linguaggio, anche la stesura delle classi è cambiata ed è stata introdotta la possibilità di inserire un valore di default dei parametri, direttamente sulla dichiarazione del costruttore, rendendo più agevole la gestione dei parametri "opzionali".