È sempre utile poter caricare dei file .swf
esterni in modo da non rendere il movie Flash principale troppo pesante. In questo modo si può ad esempio creare un movie Flash principale contenente i link alle varie sezioni del sito, sezioni che però saranno create esternamente come file .swf importabili. In questo articolo vedremo le tecniche fondamentali per:
- caricare .swf esterni in modo sincrono e asincrono
- creare il preload dei file esterni
- gestire lo scambio di variabili tra swf importati e movie principale
Caricamento sincrono vs. caricamento asincrono
Come abbiamo accennato, un swf esterno può essere caricato in due modi: asincrono e sincrono. Esaminiamo queste due modalità.
Il caricamento asincrono prevede che, una volta lanciato il processo di loading, il flusso del programma continui senza tener conto del suo avanzamento: solo quando il file è completamente caricato, il processo di loading lo segnala e il filmato può essere mandato in esecuzione.
Quindi, non potendo valutare il tempo di caricamento, l'esecuzione del filmato sarà asincrona rispetto al codice del movie Flash principale. La gestione asincrona avviene quindi tramite un listener di eventi.
Il caricamento sincrono invece avviene in diretta sequenza di codice, senza utilizzare un listener di eventi di caricamento.
Nel caso si debbano caricare dei semplici .swf, come piccole animazioni o grafica, la differenza non si noterà. Diverso è il caso in cui si voglia passare delle variabili tra i due swf; in questo caso l'swf secondario deve essere interamente caricato per poter ricevere informazioni. La stessa cosa funziona ad esempio con i file XML. Si consiglia comunque di utilizzare sempre un caricamento asincrono per una migliore gestione dei contenuti.
Caricamento sincrono
Per caricare un swf in modo sincrono bisogna creare per prima cosa un oggetto Loader:
Si crea poi un oggetto per richiedere l'URL:
var req=new URLRequest(“fileSecondario.swf”);
Dopodiché si associa l'URL all'oggetto Loader
loader.load(req);
In questo modo il file esterno viene caricato dentro l'oggetto Loader
addChild(loader);
In questo modo l'oggetto viene caricato sullo stage principale con posizione x=0
y=0
Caricamento asincrono
Per quanto riguarda il caricamento asincrono, le prime tre fasi rimangono le stesse e cioè: la creazione di un oggetto Loader
, la richiesta dell'URL e l'associazione tra i due oggetti:
A questo punto, però, viene aggiunto un evento Listener
loader.ContentLoaderInfo.addEventListener(Event.COMPLETE, fnCompleto);
Andiamo ad analizzare questa riga di codice.
L'evento è naturalmente assegnato all'oggetto loader
Loader
ContentLoaderInfo
A quest'ultima viene quindi assegnato un Listener (un'evento che rimane in “ascolto” finché non avviene l'evento indicato di seguito). L'evento in questione è COMPLETE
fnCompleto
La funzione richiamata contiene naturalmente l'azione di inserimento del contenuto sullo stage del file principale:
function fnCompleto(e:Event){ addChild(e.target.content); }
Naturalmente, come valore si fa riferimento, tramite la variabile e
loader
x=0
y=0
Obiettivamente serve più codice per gestire un caricamento in modo asincrono, ma è sicuramente il metodo più sicuro, più funzionale e più corretto.
Creazione di un preload di SWF esterni
Per creare un semplice preload di un file esterno è sufficiente creare un nuovo Listener relativo all'oggetto Loader:
In questo caso però, l'evento richiamato è PROGRESS
function fnProgress(e:ProgressEvent){ var percent = Math.floor((e.target.bytesLoaded / e.target.bytesTotal)*100); }
Analizziamo la riga di codice.
Viene creata una variabile percent
Math.floor
Il calcolo viene fatto sull'oggetto che viene caricato (e.target
percent
Passaggio di variabili tra SWF
Una delle più utili funzioni di AS3 è la possibilità di passare variabili e MovieClip tra swf diversi. L'esempio che qui vedremo si riferisce a due swf,di cui uno è importato con ActionScript nell'altro.
Creiamo quindi due file diversi e li chiamiamo padre.fla
e figlio.fla
.
Nel documento padre inseriamo una label di riconoscimento del file e un pulsante per caricare l'swf esterno. Nel documento figlio creiamo una figura colorata, una label di riconoscimento, un pulsante di cancellazione e una testo dinamico.


Per prima cosa importiamo l'swf esterno all'interno di quello principale. Usiamo lo stesso metodo, ma in questo caso è utile creare un MovieClip contenitore per facilitare poi l'utilizzo delle variabili che verranno fatte in seguito.
Creiamo quindi un MovieClip che conterrà l'swf importato:
Definiamo le proprietà del nostro bottone che si chiama carica_mc
Passaggio di variabili
Impostiamo ora il passaggio di variabili dall'swf interno a quello esterno. Nel documento padre.fla
creiamo semplicemente una variabile e assegniamo ad essa un valore.
Nel .fla che invece verrà importato(figlio.fla
var variabile=this.parent.root['nome']; testo_txt.text+= variabile;
Come si vede dal codice, creiamo una nuova variabile generica e assegniamo ad essa il valore della variabile nome
La sintassi funziona in questo modo:
this
parent
root
['nome']
Nella seconda riga di codice il contenuto della variabile viene inserito in un testo dinamico per riuscire a visualizzarlo e testare il corretto funzionamento dell'azione. Abbiamo utilizzato questo metodo per il passaggio di una variabile stringa molto semplice. Lo stesso metodo può essere usato per azioni più complesse poichè si ha anche la possibilità di inviare e comandare elementi come i MovieClip.
Cancellazione del MovieClip importato
Allo stesso modo in cui abbiamo importato la variabile, questa volta importiamo un MovieClip.
Questa volta, però, è indispensabile specificare che la variabile che riceve il contenuto è un MovieClip e non una variabile generica. Andiamo quindi a scrivere la parte di codice riguardante il pulsante cancella_mc
cancella_mc.buttonMode=true; cancella_mc.addEventListener(MouseEvent.MOUSE_DOWN,fnCancella); function fnCancella(e){ cont.removeChildAt(0); }
All'interno della funzione fnCancella
cont
removeChildAt()
Utilizzando questo metodo si possono così utilizzare variabili e MovieClip in modo dinamico da swf diversi, importati uno dentro l'altro.
Rimane un'applicazione utile nel caso si debba creare dei contenuti altamente dinamici, ad esempio nel caso in cui si abbia un file principale che contiene un menu e un file secondario esterno in cui vengono caricati i contenuti in modo dinamico. In questo modo si può inviare al file secondario una variabile che indica quali contenuti vanno caricati nel secondo file.