Adobe con AS Actionscript 3, rivoluzionando il codice ActionScript, ha migliorato notevolmente le performance dei nostri script e non possiamo che esserne felici.
Comunque, insieme all’evoluzione e al perfezionamento, sono venuti fuori anche non pochi problemi di approccio per chi era abituato ad utilizzare sempre lo stesso codice per le funzioni base delle applicazioni Flash Actionscript.
Una di queste è il classico filmato di preload o preloader che anticipa siti e animazioni Flash di grossa portata.
In questo tutorial Flash spiegheremo il codice da usare in un preloader per caricare movieclip esterni con la versione 3 di Actionscript.
Vi sono vari modi per realizzare un preloader in Flash, quello che preferisco è un filmato che carica al suo interno il movieclip esterno che vogliamo visualizzare: ricordiamoci che le dimensioni e il framerate del filmato finale coincidono con quelle del filmato che lo contiene.
Questo il codice da inserire nel primo e unico frame del filmato che conterrà l’animazione di preload.
var loader:Loader = new Loader();
var thisMC;
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
function loadProgress(event:ProgressEvent):void {
var percentLoaded:Number = event.bytesLoaded/event.bytesTotal;
percentLoaded = Math.round(percentLoaded * 100);
trace(percentLoaded.toString()+"%");
}
function loadComplete(event:Event):void {
thisMC = MovieClip(loader.content);
loader.unload();
base.addChild(thisMC);
thisMC.gotoAndPlay(1);
}
loader.load(request);
L’ Actionscript è breve e semplice: si instanza un URLRequest che caricherà il movieclip esterno, quindi un Loader e la variabile thisMC a cui assegneremo poi il filmato caricato.
Creiamo 2 EventListener che richiamano le funzioni di gestione dell’avanzamento del caricamento e del suo completamento, scriviamo queste funzioni e infine, nell’ultima riga, diciamo al Loader di caricare il movieclip esterno.
La funzione loadProgress è chiara, basta dire che per calcolare il rapporto tra bytes caricati e totali si fa riferimento all’evento passato come parametro dall’EventListener;
la funzione loadComplete è più importante ma sempre semplice da comprendere: facciamo un casting come movieclip del contenuto del Loader e quindi un’assegnazione alla variabile thisMC, scarichiamo dalla memoria il Loader ormai inutile, aggiungiamo il movieclip ad uno vuoto (qui chiamato base) che avremo precedentemente posizionato sullo Stage ed infine diciamo allo stesso di partire dal primo frame: questa operazione è importante perchè altrimenti mostrerebbe il frame dove è arrivato dall’inizio del caricamento dal parte del Loader.
Altro aspetto interessante che possiamo apprendere da questa spiegazione è la semplicità con cui si fa riferimento al filmato appena caricato: basta assegnarlo ad una variabile per gestirlo completamente come se si trovasse sullo Stage.
Se a qualcuno servisse il preloader per movieclip in AS Actionscript 2: Preloader per movieclip in as Actionscript 2
Ritieni questo post utile o interessante?
Condividi e Segnala
Leggi anche:
dei commenti -
lascia un commento - trackback










Da profano ho copiato il codice e seguito le istruzioni ma ottengo: 4 errori
1095:
Errore di sintassi: il valore letterale della stringa deve essere terminato prima dell’interruzione di riga.
Ho ricontrollato il codice e c’era un errore di decodifica dell’HTML, ho corretto e puoi riprovare.
[...] chi volesse lo stesso preloader versione AS3, ecco il link. Cerca: action script, actionscript, AS3, flash, movieclip esterno, passaggio as2 as3, [...]
Ciao a tutti…
non ci crederete…ma è la prima volta che scrivo su di un post…
Ho sempre trovato la soluzione ai miei dubbi leggendo, cercando e scavando nei post di altri.
Ma il passaggio ad as3, lavorando all’interno di un agenzia, deve essere abb.veloce.
Diciamo che ci vogliono almeno una decina di giorni per cominciare a capire come funziona.
Ho proprio questo problema col preloader… Termina il caricamento e il filmato, contenuto all’interno di un movieclip, posizionato al primo frame del swf appena scaricato, è già a metà della sua animazione….
Ho provato ad ottimizzarlo col tuo codice…. ma nulla….. ancora parte in ANTICIPO…
Mi potete aiutare?
// —————————- codice
var filename:String=”home.swf”;
var URLrequest:URLRequest=new URLRequest(filename);
var loader:Loader = new Loader();
var thisMC;
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadedProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completo);
function loadedProgress(e:ProgressEvent):void {
var total:Number=e.bytesLoaded/e.bytesTotal;
preload_mc.barPreload_mc.scaleX=total;
preload_mc.loaded_txt.text=Math.floor(total*100)+”%”;
}
function completo(event:Event):void {
removeChild(preload_mc);
thisMC = MovieClip(loader.content);
loader.unload();
movieLoaded_mc.addChild(thisMC);
}
loader.load(URLrequest);
——————————————
Grazie in anticipo.
Dario
Hai provato ad aggiungere
thisMC.gotoAndPlay(1);
?
si,
ho aggiunto thisMC.gotoAndStop(1), dato che l’animazione sta dentro ad un MovieClip al primo frame.
Pazzesco….. sempre in anticipo
OK ho risolto….
praticamente ho spostato il frame 1(dove stava posizionato il movieclip contenente l’animazione), al 2°frame e al primo ho inserito uno stop();
nella function completo(event:Event) –> ho inserito thisMC.gotoAndStop(2);
Ah, quindi partiva l’animazione perchè stava in un movieclip e non sullo stage..certo, si fermava al primo frame dello stage ma l’animazione interna partiva e andava avanti.
Potevi anche thisMC.instanza_movieclip.gotoAndPlay(1) nella funzione completo.
Ciao, ho utilizzato questo script come preload per una galleria fatta con papervision3d, ma ricevo questo errore:
TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
at GalleryProject$iinit()
il fla si chiama GalleryProject.fla, la sua classe documento si chiama GalleryProject.as all’interno di quest’ultima viene chiamata un’altra classe (Gallery.as) dove vengono sviluppati tutti i metodi per la renderizzazione vera e propria… comunque la complessità dell’swf chiamato non dovrebbe avere importanza no? viene chiamato ed eseguito no?
Mio servono lumi