Prefazione
non passo da queste parti da parecchio ma quando mi sono accorto di questa novita' ho pensato fosse importante provare a descrivervela e spiegarvela come meglio posso ...
Spero non sia un argomento gia' affrontato e spero che verra' messo in archivio come una delle tante pillole che piano piano la gente di AS di questa comunita' comincera' a fare come e' per il forum di PHP.
A parte raffaeu che si e' creato la sua rubrica per la quale non smettero' mai di ringraziare, mi sembra che gli altri, tralaltro molto capaci, potrebbero darsi un pelino piu' da fare
[ me compreso si intende ]
Ora basta con le caXXate e passiamo alla pillola, sono graditi commenti e osservazioni, potrei aver scritto parecchi sfrondoni 
Introduzione ed utilizzo di MovieClipLoader
andr3a 24/11/2003
Il MovieClipLoader e' un importante metodo della super classe MovieClip che ci permette di monitorizzzare in modo completo gli eventi di caricamento esterno, inteso come SWF o JPG.
Se in FlashMX infatti dovevamo organizzare manualmente il debug dei nostri MovieClip.loadMovie(); o dei nostri loadMovieNums(); ora abbiamo a disposizione questo metodo dedicato e potente che ha il vantaggio di:
- essere un metodo dedicato e quindi piu' preciso e/o affidabile
- evitare di incontrare problemi di debug creati da noi stessi
- informarci di eventuali problemi riscontrati
Come posso utilizare questo metodo ?
La sintassi base per istanziare il MovieClipLoader e' identica a tutte le altre:
codice:
var myLoadedMovie:MovieClipLoader = new MovieClipLoader();
// personalmente mi sto abituando ad utilizzare questo tipo di sintassi in MX 2004
// soprattutto per l' utilizzo di AS2.0 in gestione classi, ma non e' comunque errato
// abituarsi anche in stage [ opinabile ]
Abbiamo appena dichiarato una variabile di tipo MovieClipLoader che automaticamente avra' a sua disposizione dei metodi propri:
- MovieClipLoader.addListener();
- MovieClipLoader.getProgress();
- MovieClipLoader.loadClip();
- MovieClipLoader.removeListener();
- MovieClipLoader.unloadClip();
Questi metodi sono gli stessi che utilizzeremo per monitorizzare lo stato dei nostri load, che in questa versione saranno dei loadClip(); .
Ora vediamo nel dettaglio i metodi.
MovieClipLoader.addListener();
il primo, il piu' importante, quello che autorizzera' il nostro listner ad interagire con lo stato del nostro MovieClipLoader.
In pratica tramite la creazione di un Oggetto e l'assegnazine di eventi dedicati a quest'oggetto stesso, possiamo dare inizio alla realizzazione del nostro caricamento monitorizzato.
codice:
var MovieListner:Object = new Object();
Abbiamo appena creato il gestore eventi, che altro non dovra' contenere se non la serie di eventi dedicati per questa occasione che sono:
- MovieClipLoader.onLoadComplete();
- MovieClipLoader.onLoadError();
- MovieClipLoader.onLoadInit();
- MovieClipLoader.onLoadProgress();
- MovieClipLoader.onLoadStart();
Vediamo ora in sequenza di utilizzo questa serie di eventi dedicati.
onLoadStart();
Questo evento viene automaticamente invocato appena inizia il download o il caricamento del nostro file SWF o JPG specificato in loadClip();
E' di fatto l' antitesi di onLoadError(); e ci assicura che il file specificato e' stato trovato e che il download non ha avuto problemi a partire.
codice:
Esempio:
MovieListner.onLoadStart = function (target_mc) {
trace("Caricamento di " + target_mc + " avviato con successo.");
// target_mc e' un valore statico con un nome a piacere e presente in tutti i gestori
// non e' obbligatorio l' utilizzo
// ma puo' restituirci in ogni momento il nome
// del nostro caricante.
}
onLoadProgress();
Questo evento monitorizza lo stato di avanzamento ed e' automaticamente invocato ogni qualvolta esistono cambiamenti di contenuti nel totale caricato e/o totale disponibile.
codice:
Esempio:
MovieListner.onLoadProgress = function (target_mc, loadedBytes, totalBytes) {
trace("bytes caricati: " + loadedBytes);
trace("bytes totali: " + totalBytes);
// loadedBytes e totalBytes prendono il posto di
// movieClip.getBytesLoaded(); e movieClip.getBytesTotal();
}
onLoadComplete();
Questo evento verra' invocato automaticamente a caricamento avvenuto o piu' precisamente a fine download.
Fate attenziopne sul fatto che non e' il vero e proprio stato di utilizzo del nostro nuovo SWF o JPG caricato, bensi' la conferma di fine utilizzo banda.
[ in realta' e' un po' piu' complicato da spiegare ma potrebbe dare problemi se utilizzato come tale ]
codice:
Esempio:
MovieListner.onLoadComplete = function (target_mc) {
trace("Il -- DOWNLOAD -- del file e' appena terminato");
}
onLoadInit();
Ed ecco qui , invece, il vero inizializzatore del nostro movieClip o livello caricato, la conferma ufficiale che se apportiamo modifiche a quanto caricato, questo le accetti perche' realmente esistente e presente nel livello o nel movie caricante.
codice:
Esempio:
MovieListner.onLoadInit = function (target_mc) {
target_mc._alpha = 20;
target_mc._x = Stage.width - target_mc._width;
target_mc._y = 10;
trace(target_mc + " e' disponibile ed e' stato nizializzato!!!");
}
In fine dobbiamo anche prendere in considerazione che potrebbero esserci problemi durante il download o che il percorso del file potrebbe essere errato.
Ed ecco l' evento dedicato con tanto di codice di errore.
onLoadError();
Come dice il nome e' l'evento che verra' invocato se fallira' l' onLoadStart() e che ci dira' tramite la statica errorCode quale e' stato il problema in caricamento.
codice:
Esempio:
MovieListner.onLoadError = function (target_mc, errorCode) {
trace("Impossibile caricare questo file: " + target_mc);
trace("[ " + errorCode + " ]");
}
Se questi sono eventi dedicati per il listner, non dimentichiamoci che il MovieClipLoader ha comunque un metodo dedicato ed utilizzabile anche all' interno del listner che e' il
MovieClipLoader.getProgress();
Questo metodo ci restituisce il totale bytes caricati e totali di files compressi.
A dire il vero non ho avuto modo di testare a findo questo tipo di oggetto ma sappiate che puo' essere tranquillamente inserito all' interno di onLoadStart o meglio ancora in aggiunta ad onLoadProgress.
codice:
Esempio:
var loadProgress:Object = new Object(myLoadedMovie.getProgress(target_mc));
// devo specificare il LoadMovieLoader.getProgress(mc_di_riferimento);
// restituira' all' oggetto loadProgress i valori bytesLoaded e bytesTotal
trace("Bytes caricati all' avvio: " + loadProgress.bytesLoaded);
trace("Bytes totali all' avvio: " + loadProgress.bytesTotal);
Lascio a voi commenti e/o prove effettuate riguardo questo metodo.
MovieClipLoader.loadClip();
Eccoci arrivati alla base del MovieClipLoader, ovvero il metodo che indica:
- su quale MovieClip caricare come target il nostro file specificato
- su quale livello caricare il file specificato
In entrambi casi sovrascrive quanto esistente in quel Movie o in quel livello.
Mi sento di consigliare il MovieClip, come target, per il semplice fatto che ci sono molte piu' possibilita' di controllo su un MC piuttosto che su un _level.
codice:
Esempio:
MovieClipLoader.loadClip(myFile, myMove); // per caricare su un MovieClip
MovieClipLoader.loadClip(myFile, 1); // per caricare su un livello
[ non vi preoccupate, tra poco ci sara' un esempio completo se state andando in confuzione ]
MovieClipLoader.removeListener();
Semplicemente elimina l' oggetto listner associato al MovieClipLoader.
La sintassi e' molto semplice ed intuitiva:
codice:
MovieClipLoader.removeListener(MovieListner);
MovieClipLoader.unloadClip();
Come da nome e' il metodo che ci permette di rimuovere un livello o un MiveClip caricati tramite loadClip();
Da considerare che oltre a darci la possibilita' di eliminare definitivamente il livello o il movie in questione, e' utile per lasciare il nostro filmato il piu' pulito possibile associando questo evento, ad esempio, all' interno dell' onLoadError.
codice:
Esempio:
MovieListner.onLoadError = function (target_mc, errorCode) {
trace("Impossibile caricare questo file: " + target_mc);
trace("[ " + errorCode + " ]");
MovieListner.unloadClip(target_mc); // elimina definitivamente dalla memoria e dallo stage
}
Abbiamo appena finito di vedere tutti [almeno credo ... ] i metodi e le proprieta' che ruotano attorno a MovieClipLoader.
Per concludere questa pillola volevo farvi vedere un esempio commentato completo di utilizzo codice per il caricamento di un filmato SWF, di nome mySWF.swf all' interno di un altro filmato.