Salve a tutti !
Abbiamo già visto a cosa potrebbe servire la classe getDefinitionByName di Actionscript 3.0 lavorando con dei suoni che vengono caricati dalla libreria con Flash CS3.
In questo tutorial Flash CS3 vedremo come utilizzare questa classe per recuperare una MovieClip di una libreria di un SWF caricato dall' SWF che lo carica.
Supponiamo di avere un SWF A che carica un SWF B.
Dall' SWF A vogliamo raggiungere una MovieClip nella libreria dell' SWF B che ha un linkage ( identificatore ) ad una classe che chiameremo Try.
Se fisicamente creo la classe Try, quindi un file Try.as, allora posso riferirmi direttamente a quella classe anche dall' SWF A.
Se non creo fisicamente la classe Try.as e la lascio creare a Flash, allora utilizzando la classe getDefinitionByName nell' SWF B posso raggiugere quella MovieClip e interagire con lei.
Creo un FLA che salvo con nome main.fla .
Creo un altro FLA che salvo con nome B.fla .
All' interno di B.fla creo un campo di testo statico e ci scrivo qualche cosa in modo da poterlo vedere quando caricheremo B.swf in main.swf .
Creo una MovieClip di qualsiasi forma in B.fla che lascio nella libreria con nome mc_try. Nel campo Class dell' identificatore di mc_try scrivo Try senza creare fisicamente la classe.
Ora, sempre in B.fla, scrivo questa funzione:
Code:
function getClass(str:String):MovieClip
{
var c:Class = Class(getDefinitionByName(str));
return new c();
};
Questa funzione, quando chiamata, vuole una stringa e restituisce una MovieClip.
Crea una nuova variabile di tipo Class, forzando appunto il tipo con Class.
Uitlizza quella stringa come parametro della classe getDefinitionByName e restituisce una nova MovieClip che non è altro che una istanza di mc_try.
Adesso carico B.swf in main.swf, utilizzando questo codice:
Code:
var request:URLRequest=new URLRequest('B.swf');
var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
loader.load(request);
function onComplete(evt:Event):void
{
addChild(loader);
var clip:MovieClip=loader.content as MovieClip;
var my_try:MovieClip=clip.getClass("Try");
addChild(my_try);
}
Da notare queste righe:
var clip:MovieClip=loader.content as MovieClip;
var my_try:MovieClip=clip.getClass("Try");
addChild(my_try);
creo una variabile MovieClip che chiamo clip e gli assegno il valore del contenuto del loader forzato a tipo MovieClip.
creo un' altra variabile di tipo MovieClip e gli assegno quello che resituisce la funzione getClass che risiede in B.swf.
Il bello è che in questo modo posso attaccare mc_try che si trova nella libreria di B.swf anche allo stage di main.swf .
Se invece avessi fisicamente creato la classe Try.as, allora sarebbe bastato riferirmi a lei da main.fla in questo modo:
var my_try:Try=new Try();
addChild(my_try);
Alla prossima !