Da un file SWF Flash potete caricare altri file SWF esterni come risorse. Esistono diverse ragioni per caricare file SWF esterni:
- Poiché potete dividere un progetto in più filmati, i singoli file SWF presentano dimensioni inferiori. Il caricamento di file di dimensioni inferiori è più rapido e la gestione della memoria risulta più efficiente.
- Potete caricare solo i contenuti necessari in base alle operazioni svolte dall'utente nel filmato.
- Potete riprodurre più file SWF in successione evitando il caricamento di un'altra pagina HTML nel browser. Non sono necessari pause o aggiornamenti delle pagine associati al ricaricamento.
- L'organizzazione delle risorse del progetto risulta più flessibile.
- Potete creare un'interfaccia utente complessa che non si basa su un unico file SWF. Per creare l'interfaccia, è possibile combinare diversi file SWF. La combinazione dei file SWF semplifica le modifiche, poiché consente di esaminare singoli file SWF di dimensioni inferiori senza influire sulle altre parti dell'interfaccia.
- Più autori possono collaborare allo stesso progetto operando su file FLA separati.
L'inserimento di contenuto in un file SWF separato è simile all'inserimento di contenuto nel relativo simbolo clip filmato. La differenza è che il contenuto esiste al di fuori del file SWF principale. È inoltre possibile caricare file di immagine quali JPG, PNG, GIF.
Per caricare un file SWF esterno da un altro file SWF, utilizzate uno dei seguenti metodi:
- Classe Loader di ActionScript 3.0
- Comando loadMovie di ActionScript 2.0
- Classe MovieClipLoader di ActionScript 2.0
Uso della classe Loader di ActionScript 3.0
La classe Loader di ActionScript 3.0 è una sottoclasse di DisplayObject che viene utilizzata per caricare e visualizzare contenuti esterni. Per caricare il file SWF, utilizzate il metodo load della classe.Il metodo load presenta un parametro obbligatorio, ossia un'istanza URLRequest contenente l'indirizzo URL del contenuto da caricare.
Il seguente esempio di codice consente di creare un'istanza Loader e di caricare un file SWF esterno denominato "myExternalMovie.swf".
var myLoader:Loader = new Loader(); // create a new instance of the Loader class var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder myLoader.load(url); // load the SWF file addChild(myLoader); // add that instance to the display list, adding it to the Stage at 0,0 // (optional) myLoader.x = 10; // move the loaded SWF 10 pixels to the right (from the left edge) myLoader.y = 175; // move the loaded SWF 175 pixels down from the top // (optional) load a second external SWF file var my2ndLoader:Loader = new Loader(); var url2:URLRequest = new URLRequest("ExternalSWF2.swf"); my2ndLoader.load(url2); addChild(my2ndLoader); // optionally, you could put the 2nd SWF beneath // the 1st by using addChildAt(my2ndLoader, 1); // displacing the 1st SWF from position 1 to 2 in the display list // (optional) scaling of the 2nd SWF file my2ndLoader.scaleX = 2; // scale the SWF horizontally by 200% my2ndLoader.scaleY = 2; // scale the SWF vertically by 200%
L'URL del file SWF caricato può essere relativo o assoluto. Per ulteriori informazioni sulla modalità in cui Flash Player gestisce gli URL, consultate la sezione Percorsi relativi riportata di seguito. Per ulteriori informazioni sulla classe Loader, consultate la sezione Loader nella guida di riferimento di ActionScript della piattaforma.
I riferimenti alla radice, ove disponibili, riflettono sempre l'oggetto di visualizzazione del livello più alto nella porzione della struttura ad albero dell'elenco di visualizzazione, rappresentato dal file SWF in questione (per le immagini, la radice fa riferimento all'oggetto Bitmap).
Nota: in ActionScript 3.0, non esiste un elemento equivalente alle proprietà _lockroot o _level di ActionScript 2.0. Consultate la sezione Elementi fondamentali della programmazione degli elementi visivi nella Guida per gli sviluppatori di ActionScript 3.0.
Contenuto correlato per ActionScript 3.0:
- File di esempio per la presente nota tecnica: set di tre file FLA e tre file SWF corrispondenti, compresi un file SWF padre e due file SWF che vengono caricati dal file padre.
- Guida > Guida per sviluppatori AS3 > Caricamento di un file SWF esterno
- Guida > Guida per sviluppatori AS3 > Caricamento dinamico di contenuto di visualizzazione
- Loading multiple external SWFs within a main SWF file - Forum CreativeCow.net
- Esercitazione video: ActionScript 101 - Episodio 6: Adding named objects to the Stage, di Doug Winnie. Esempio di aggiunta della risorsa esterna caricata allo stage e modifica della relativa posizione o di altre proprietà.
- Esercitazione: Loading and unloading SWFs - FlashAndMath.com
Uso del comando loadMovie di ActionScript 2.0
Il comando loadMovie consente di caricare un file SWF esterno o un'immagine in un MovieClip o in un altro livello del filmato padre in ActionScript 2.0.
Il comando loadMovie presenta due forme diverse:
- Metodo MovieClip.loadMovie: il metodo MovieClip viene utilizzato per il caricamento di contenuti esterni in una specifica istanza di un clip filmato.
- Funzione loadMovie globale: la funzione loadMovie globale può essere utilizzata per il caricamento di contenuti in filmati o livelli. Anche la versione globale presenta due varianti, ossia loadMovie e loadMovieNum. La prima variante carica il contenuto in filmati o livelli, mentre la seconda (loadMovieNum) lo carica specificamente nei livelli.
MovieClip.loadMovie
Quando caricate contenuti esterni in istanze di clip filmato, Adobe consiglia di utilizzare la versione del metodo MovieClip di loadMovie. Questa versione viene richiamata direttamente dal clip filmato in cui desiderate caricare il contenuto e al suo interno viene trasferito l'URL del contenuto.
myMovieClipInstance.loadMovie("myExternalMovie.swf"); // here only the filename is given, indicating the SWF file // is in the same folder as the parent SWF.
L'URL del contenuto caricato può essere relativo o assoluto. Per ulteriori informazioni sulla modalità in cui Flash Player gestisce gli URL, consultate la sezione Percorsi relativi riportata di seguito.
Quando viene caricato, il contenuto è visualizzato nel clip filmato contenitore. La posizione e altre proprietà di base del clip filmato contenitore vengono conservate. Tuttavia, eventuali proprietà o funzioni personalizzate definite nel clip filmato contenitore non saranno più presenti. Il nuovo contenuto sostituisce tutto il contenuto precedente (compresi gestori di codice ed eventi quali onRelease). Pertanto, eventuali tentativi di utilizzare un gestore eventi onLoad per il clip filmato non avranno esito positivo. In questo caso, utilizzate la classe MovieClipLoader (vedete di seguito). Per ulteriori informazioni su MovieClip.loadMovie, consultate la sezione MovieClip.loadMovie nella Guida di riferimento di ActionScript 2.0.
loadMovie globale e loadMovieNum
Il comando loadMovie esiste anche come funzione globale. Tale funzione presenta due parametri obbligatori, ossia l'URL del contenuto esterno e la destinazione in cui il contenuto viene caricato. Il parametro destinazione può essere una stringa o un riferimento. Le righe seguenti equivalgono al caricamento di "myExternalMovie.swf" nell'istanza del clip filmato denominato myContainer:
loadMovie("myExternalMovie.swf", myContainer); // the target myContainer is an object reference loadMovie("myExternalMovie.swf", "myContainer"); // the target "myContainer" is a string
loadMovie consente anche di caricare contenuti in diversi livelli di Flash Player. I livelli in Flash Player sono come i livelli di un lettore. È possibile riprodurre più filmati nella stessa istanza di Flash Player senza che vengano nidificati. Ogni livello rappresenta una radice univoca in cui i filmati possono essere riprodotti indipendentemente da quelli degli altri livelli (l'uso di _lockroot non è necessario).
Potete fare riferimento ai livelli in ActionScript utilizzando _level seguito da una cifra che rappresenta il numero del livello. Il primo filmato caricato in Flash Player è su _level0. Sopra questo livello è possibile aggiungerne altri. La chiamata seguente di loadMovie carica "myExternalMovie.swf" nel livello 1 sopra al filmato attualmente riprodotto nel lettore.
loadMovie("myExternalMovie.swf", "_level1");
Una variante della funzione loadMovie globale è loadMovieNum. Questo metodo è identico a loadMovie, tranne per il fatto che l'unica destinazione sono i livelli e vengono identificati per numero, non per nome. Per caricare un file SWF esterno nel livello 1 (_level1), ad esempio, utilizzate il seguente comando:
loadMovieNum("myExternalMovie.swf", 1);
Quando effettuate il caricamento in livelli, Adobe consiglia di utilizzare loadMovieNum anziché loadMovie. Per ulteriori informazioni, consultate la sezione relativa a loadMovie globale nella Guida di riferimento di ActionScript 2.0.
Uso di _lockroot per evitare conflitti _root
Quando caricate un filmato esterno in un altro filmato, il riferimento _root del clip filmato caricato cambia dalla relativa linea temporale principale a quella del filmato che ha effettuato il caricamento. In altre parole, _root fa sempre riferimento alla linea temporale del livello più alto nella gerarchia. Se desiderate che _root non faccia riferimento alla linea temporale del livello più alto, impostate la proprietà _lockroot della linea temporale principale del clip filmato caricato su true. Questa proprietà comunica a tutti gli elementi figlio della linea temporale in questione che, in presenza di un riferimento a _root, devono fare riferimento a tale linea temporale.
this._lockroot = true; // add this code in the main timeline of the SWF file that will be loaded into another SWF
Nota: la proprietà _lockroot è disponibile solo quando si esegue la pubblicazione in Flash Player 7 o versioni successive.
Contenuto correlato per ActionScript 2.0:
- Guida > Apprendimento di ActionScript 2.0 > Caricamento di file SWF e file di immagine esterni
Uso della classe MovieClipLoader di ActionScript 2.0
La classe MovieClipLoader in ActionScript 2.0 è progettata per semplificare il processo di caricamento di contenuti esterni in istanze MovieClip. Come indicato in precedenza, quando nei clip filmato vengono caricati nuovi contenuti, le variabili e le funzioni definite al loro interno vengono rimosse. I callback come onLoad non sono possibili. Tuttavia, MovieClipLoader consente di superare questo limite operando come surrogato per tali eventi. Per gestire il caricamento di contenuti in un altro clip filmato, vengono create istanze separate di MovieClipLoader. Pertanto, la cancellazione di variabili o funzioni in tale clip filmato non viene eseguita.
Quando caricate contenuti in un clip filmato tramite la classe MovieClipLoader, create prima una nuova istanza della classe. Quindi, utilizzate loadClip per caricare i contenuti in un clip filmato di destinazione. Nell'esempio seguente i nuovi contenuti vengono caricati nel clip filmato myContainer.
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.loadClip("myExternalMovie.swf", myContainer);
Per accertarvi che i contenuti vengano caricati, utilizzate il gestore eventi onLoadInit con l'istanza MovieClipLoader.
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.addListener(this); myLoader.loadClip("myExternalMovie.swf", myContainer); function onLoadInit(mc:MovieClip) { trace("content has been loaded into "+mc); }
Per ottenere maggiore controllo sulle informazioni relative al caricamento dei contenuti in un clip filmato, utilizzate la classe MovieClipLoader anziché MovieClip.loadMovie (ad esempio, utilizzate questo gestore eventi per poter verificare l'avanzamento del caricamento).Per ulteriori informazioni sulla classe MovieClipLoader, consultate la sezione MovieClipLoader nella Guida di riferimento di ActionScript 2.0.
Nota: la classe MovieClipLoader è disponibile solo quando si esegue la pubblicazione in Flash Player 7 o versioni successive.
Uso di percorsi relativi per il caricamento di contenuti
L'uso di percorsi relativi con Loader e loadMovie può risultare complesso. Poiché la linea temporale di qualsiasi file SWF o clip filmato può eseguire un'azione loadMovie, potreste chiedervi a quale linea temporale sia correlato il filmato caricato: è correlato alla linea temporale principale su _level0 oppure alla linea temporale che ha eseguito l'azione di caricamento del filmato? La risposta è semplice: i filmati caricati sono sempre correlati alla linea temporale che ha eseguito il caricamento. Per informazioni sui percorsi relativi, rilevanti anche per il caricamento di file SWF esterni, consultate la nota tecnica URL relativi con riferimenti errati | Flash (tn_04157).
Considerazioni relative alla frequenza dei fotogrammi
Nella maggior parte dei casi, un filmato caricato eredita la frequenza dei fotogrammi del filmato padre. Ad esempio, un file SWF la cui frequenza dei fotogrammi è pari a 12 fps viene riprodotto a 24 fps quando è caricato in un filmato con frequenza di 24 fps. L'unica eccezione si verifica quando il filmato caricato contiene un suono sulla linea temporale la cui sincronizzazione è impostata su "Flusso”. Solo in questo caso è il filmato principale a ereditare la frequenza dei fotogrammi del filmato caricato al fine di garantire la corretta riproduzione del suono.
Nota: ActionScript 3.0 consente di modificare dinamicamente la frequenza dei fotogrammi mediante la proprietà Stage.frameRate.
Ulteriore contenuto correlato
- Comunicazione da SWF a SWF mediante ActionScript (comprende la comunicazione padre-figlio e figlio-padre)
Parole chiave: Flash Player, carica filmato; ActionScript; scripting; livelli; comunicazione destinazione; variabili; destinazione; istanza; SWF; loadMovie; tn_14190
Accedi al tuo account