Da un file SWF Flash potete caricare altri file SWF esterni come risorse. Esistono diverse ragioni per caricare file SWF esterni:
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:
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.
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:
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.
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.
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.
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.
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).
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.
Parole chiave: Flash Player, carica filmato; ActionScript; scripting; livelli; comunicazione destinazione; variabili; destinazione; istanza; SWF; loadMovie; tn_14190
Accedi al tuo account