» Preloader per Movieclip in AS Actionscript 3


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 request:URLRequest = new URLRequest("swf/spot.swf");
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:

Feed dei commenti dei commenti - lascia un commento - trackback

9 commenti per “Preloader per Movieclip in AS Actionscript 3”

  1. daniele fassio

    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.

  2. R.A.M.Page

    Ho ricontrollato il codice e c’era un errore di decodifica dell’HTML, ho corretto e puoi riprovare.

  3. Preloader per Movieclip esterni per AS2 | W3 facile - Risorse, tutorial, notizie sul Web per lo sviluppatore ed il webdesigner

    [...] chi volesse lo stesso preloader versione AS3, ecco il link. Cerca: action script, actionscript, AS3, flash, movieclip esterno, passaggio as2 as3, [...]

  4. Dario

    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

  5. R.A.M.Page

    Hai provato ad aggiungere
    thisMC.gotoAndPlay(1);
    ?

  6. Dario

    si,
    ho aggiunto thisMC.gotoAndStop(1), dato che l’animazione sta dentro ad un MovieClip al primo frame.
    Pazzesco….. sempre in anticipo

  7. Dario

    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);

  8. R.A.M.Page

    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.

  9. luca

    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

Rispondi al post