Creare un preloader generico in Actionscript 3.0
Lunedì 16 Giugno, 2008
Potrebbe sembrare un argomento scontato e ormai esaurito, eppure con Flash CS3 e la nuova gestione della classi documento (package) permesse con Actionscript 3.0, non è del tutto immediato creare un preloader funzionante. L'ultima release di Flash, infatti, gestisce il caricamento del filmato in modo diverso dalle precedenti versioni. In rete potrete trovare diverse proposte e soluzioni per ricreare un preloader "vecchio stampo". Tuttavia i vari esempi che ho trovato non mi soddisfano pienamente in quanto richiedono di alterare il filmato in modo da farlo funzionare come un preloader classico. In pratica quando si sviluppa bisogna sempre rammentare "questa cosa la devo fare così altrimenti il preload non funziona"! E per i filmati già compilati, poi?
Loader
La soluzione che ho adottato, almeno per adesso, è stata quella di creare un filmato esterno (il mio loader - vedi esempio) in grado di caricare qualsiasi altro filmato esterno, compresa un'immagine! Questa soluzione, nonostante richieda in pratica due filmati (il loader e il filamato vero e proprio), diventa economica solo se si riesce a creare un loader in grado di essere usato più e più volte; cioè in grado di caricare qualsiasi filmato, a qualsiasi risoluzione e a qualsiasi framerate.
Security: swf e immagini
Ricordate che se il filmato swf da caricare si trova su un dominio diverso dal loader, dovrete fare i conti con il sistema di security di Flash. Se usate il loader per caricare delle immagini, invece, il problema non sussiste. Nella classe da me presentata non vi è nessun controllo sulla sandbox e sul sistema di security, in quanto uso il loader nello stesso dominio.
Per maggiori informazioni al riguardo vedere oggetto Security e LoaderContext:
La classe
LoaderContextfornisce le opzioni necessarie al caricamento dei file SWF e di altri contenuti multimediali mediante la classeLoader. La classeLoaderContextviene usata come parametro context nei metodiload()eloadBytes()della classeLoader.
Quando si caricano i file SWF mediante il metodoLoader.load(), è necessario decidere in quale dominio di sicurezza e in quale dominio applicazione all'interno del dominio di sicurezza si desidera posizionarli. Per ulteriori informazioni su queste opzioni, vedere le proprietÃapplicationDomainesecurityDomain. [...]
1. Nome del file swf da caricare
Per realizzare un loader generico è ovvio che il nome del filmato (come eventualmente altre informazioni: titolo, ...) dev'essere passato in qualche modo runtime. La tecnica che ho usato è quella descritta in Leggere i parametri di un filmato in Actionscript 3.0. In pratica si userà :
-
loader.swf?filename=filmato.swf
2. Dimensioni
Impostando lo stage del loader in modalità StageScaleMode.NO_SCALE, si può impostare il filmato loader alla stessa risoluzione del filmato da caricare! That's all!
3. Frame Rate
Quando il caricamento del filmato esterno è terminato basta eseguire:
-
stage.frameRate = _loader.contentLoaderInfo.frameRate;
Sorgenti

Un esempio di classe loader è UndoLoader.as. Questa può essere utilizzata come classe documento in una filmato (loader.fla), che conterrà gli elementi grafici (complessi quanto volete) del vostro preloader.
Vedi anche...
- 31.08.08: jQuery restyling (0)
- 28.08.08: WP-ABS: aggiornamento release 1.1 (3)
- 27.08.08: Very short snippet: inviare email in HTML con PHP (0)
- 26.08.08: Skypemote.com: dillo con le emotions (4)
- 21.08.08: WP-ABS: aggiungere il proprio blog al search del browser (8)


















Marcos ha detto:
Eu sou novo com flash e AS, portanto fiquei com algumas duvidas, não rola um passo a passo?
valeu
Peno ha detto:
I file che fai scaricare non funzionano, e la spiegazione di come richiamare il file esterno non è affatto chiara, “loader.swf?filename=filmato.swf” perchè nell’altro articolo “Leggere i parametri di un filmato in Actionscript 3.0″ usi del codice html???? potresti chiarire questo punto? grazie.
Giovambattista Fazioli ha detto:
@Peno: Per i parametri l’indicazione
loader.swf?filename=nomefilmatodacaricare.swfè prettamente tecnica, nel senso che indica di passare come parametri MIME (in GET) i dati al filmato “caricatore”.Nell’articolo da te citato uso un codice HTML ma dipende dalla tecnica che vuoi usare per mostrare il filmato sulla pagina. Quando aggiungi un contenuto dinamico ad una pagina HTML, nel caso specifico un filmato Flash, puoi usare vari metodi:
1) Usare un codice HTML diretto
2) Usare una tua funzione Javascriopt che inserisce il codice dinamicamente
3) Usare strumenti come LightWindow o Shadowbox
4) Usare tool come SWFObject
Per questo motivo ho indicato semplicemente il “passaggio dei parametri MIME”:
loader.swf?filename=nomefilmatodacaricare.swfIl cuore del sistema, comunque, è la classe
UndoLoader.asIl file FLA è un esempio del suo uso e a me funziona… che problemi ti da?
Peno ha detto:
Grazie per la risposta, però data la mia ignoranza in materia non capisco come fare a caricare un file swf esterno usando solo flash, per capirci non so cosa devo modificare in UndoLoader.as.
il file .fla che scrico quando cerco di pubblicarlo mi dice che è impossibile e di controllare se si trova su un disco bloccato in scrittura! cosa che non è!
Grazie
Peno.
Giovambattista Fazioli ha detto:
@Peno: la classe
Undoloader.asnon devi modificarla, almeno non è necessario modificarla per far funzionare il tutto. La questione principale è che la classeUndoloader.asva legata ad un filmato Flash caricatore, quello che tu hai scaricato come esempio. Per far funzionare il tutto, devi:1) Crea una cartella e inserisci in questa sia il .FLA che la classe
Undoloader.as2) Apri il .FLA e verifica le impostazioni di pubblicazione, sono queste che probabilmente ti causano qualche problema
Il filmato cosi compilato diventa il “caricatore” di cosa? Di quello che gli passi nel “MIME” quando lo inserisci nella tua pagina.
Se mi dai una mail valida (quella che hai inserito mi ritorna indietro) ti scrivo di persona in modo più dettagliato.
Peno ha detto:
grazie mille per la disponibilità , questa mail funziona sicuramente,
peno78@gmail.com.
peno.