Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Caricamento sincrono e asincrono di SWF esterni con AS3

Scegliere tra il caricamento sincrono e quello asincrono, lavorare con il passaggio di variabili
Scegliere tra il caricamento sincrono e quello asincrono, lavorare con il passaggio di variabili
Link copiato negli appunti

È sempre utile poter caricare dei file .swf esterni in modo da non rendere il movie Flash principale troppo pesante. In questo modo si può ad esempio creare un movie Flash principale contenente i link alle varie sezioni del sito, sezioni che però saranno create esternamente come file .swf importabili. In questo articolo vedremo le tecniche fondamentali per:

  • caricare .swf esterni in modo sincrono e asincrono
  • creare il preload dei file esterni
  • gestire lo scambio di variabili tra swf importati e movie principale
  • Caricamento sincrono vs. caricamento asincrono

    Come abbiamo accennato, un swf esterno può essere caricato in due modi: asincrono e sincrono. Esaminiamo queste due modalità.

    Il caricamento asincrono prevede che, una volta lanciato il processo di loading, il flusso del programma continui senza tener conto del suo avanzamento: solo quando il file è completamente caricato, il processo di loading lo segnala e il filmato può essere mandato in esecuzione.

    Quindi, non potendo valutare il tempo di caricamento, l'esecuzione del filmato sarà asincrona rispetto al codice del movie Flash principale. La gestione asincrona avviene quindi tramite un listener di eventi.

    Il caricamento sincrono invece avviene in diretta sequenza di codice, senza utilizzare un listener di eventi di caricamento.

    Nel caso si debbano caricare dei semplici .swf, come piccole animazioni o grafica, la differenza non si noterà. Diverso è il caso in cui si voglia passare delle variabili tra i due swf; in questo caso l'swf secondario deve essere interamente caricato per poter ricevere informazioni. La stessa cosa funziona ad esempio con i file XML. Si consiglia comunque di utilizzare sempre un caricamento asincrono per una migliore gestione dei contenuti.

    Caricamento sincrono

    Per caricare un swf in modo sincrono bisogna creare per prima cosa un oggetto Loader:

    Si crea poi un oggetto per richiedere l'URL:

    var req=new URLRequest(“fileSecondario.swf”);
    

    Dopodiché si associa l'URL all'oggetto Loader

    loader.load(req);
    

    In questo modo il file esterno viene caricato dentro l'oggetto Loader

    addChild(loader);
    

    In questo modo l'oggetto viene caricato sullo stage principale con posizione x=0 y=0

    Caricamento asincrono

    Per quanto riguarda il caricamento asincrono, le prime tre fasi rimangono le stesse e cioè: la creazione di un oggetto Loader, la richiesta dell'URL e l'associazione tra i due oggetti:

    A questo punto, però, viene aggiunto un evento Listener

    loader.ContentLoaderInfo.addEventListener(Event.COMPLETE, fnCompleto);
    

    Andiamo ad analizzare questa riga di codice.

    L'evento è naturalmente assegnato all'oggetto loader Loader ContentLoaderInfo

    A quest'ultima viene quindi assegnato un Listener (un'evento che rimane in “ascolto” finché non avviene l'evento indicato di seguito). L'evento in questione è COMPLETE fnCompleto

    La funzione richiamata contiene naturalmente l'azione di inserimento del contenuto sullo stage del file principale:

    function fnCompleto(e:Event){
      addChild(e.target.content);
    }
    

    Naturalmente, come valore si fa riferimento, tramite la variabile e loader x=0 y=0

    Obiettivamente serve più codice per gestire un caricamento in modo asincrono, ma è sicuramente il metodo più sicuro, più funzionale e più corretto.

    Creazione di un preload di SWF esterni

    Per creare un semplice preload di un file esterno è sufficiente creare un nuovo Listener relativo all'oggetto Loader:

    In questo caso però, l'evento richiamato è PROGRESS

    function fnProgress(e:ProgressEvent){	
      var percent = Math.floor((e.target.bytesLoaded / e.target.bytesTotal)*100);
    }
    

    Analizziamo la riga di codice.

    Viene creata una variabile percent Math.floor

    Il calcolo viene fatto sull'oggetto che viene caricato (e.target percent

    Passaggio di variabili tra SWF

    Una delle più utili funzioni di AS3 è la possibilità di passare variabili e MovieClip tra swf diversi. L'esempio che qui vedremo si riferisce a due swf,di cui uno è importato con ActionScript nell'altro.

    Creiamo quindi due file diversi e li chiamiamo padre.fla e figlio.fla.

    Nel documento padre inseriamo una label di riconoscimento del file e un pulsante per caricare l'swf esterno. Nel documento figlio creiamo una figura colorata, una label di riconoscimento, un pulsante di cancellazione e una testo dinamico.

    Figura 1
    screenshot
    Figura 2
    screenshot

    Per prima cosa importiamo l'swf esterno all'interno di quello principale. Usiamo lo stesso metodo, ma in questo caso è utile creare un MovieClip contenitore per facilitare poi l'utilizzo delle variabili che verranno fatte in seguito.

    Creiamo quindi un MovieClip che conterrà l'swf importato:

    Definiamo le proprietà del nostro bottone che si chiama carica_mc

    Passaggio di variabili

    Impostiamo ora il passaggio di variabili dall'swf interno a quello esterno. Nel documento padre.fla creiamo semplicemente una variabile e assegniamo ad essa un valore.

    Nel .fla che invece verrà importato(figlio.fla

    var variabile=this.parent.root['nome'];
    testo_txt.text+= variabile;
    

    Come si vede dal codice, creiamo una nuova variabile generica e assegniamo ad essa il valore della variabile nome

    La sintassi funziona in questo modo:

    • this
    • parent
    • root
    • ['nome']

    Nella seconda riga di codice il contenuto della variabile viene inserito in un testo dinamico per riuscire a visualizzarlo e testare il corretto funzionamento dell'azione. Abbiamo utilizzato questo metodo per il passaggio di una variabile stringa molto semplice. Lo stesso metodo può essere usato per azioni più complesse poichè si ha anche la possibilità di inviare e comandare elementi come i MovieClip.

    Cancellazione del MovieClip importato

    Allo stesso modo in cui abbiamo importato la variabile, questa volta importiamo un MovieClip.

    Questa volta, però, è indispensabile specificare che la variabile che riceve il contenuto è un MovieClip e non una variabile generica. Andiamo quindi a scrivere la parte di codice riguardante il pulsante cancella_mc

    cancella_mc.buttonMode=true;
    cancella_mc.addEventListener(MouseEvent.MOUSE_DOWN,fnCancella);
    function fnCancella(e){
    	cont.removeChildAt(0);
    }
    

    All'interno della funzione fnCancella cont removeChildAt()

    Utilizzando questo metodo si possono così utilizzare variabili e MovieClip in modo dinamico da swf diversi, importati uno dentro l'altro.

    Rimane un'applicazione utile nel caso si debba creare dei contenuti altamente dinamici, ad esempio nel caso in cui si abbia un file principale che contiene un menu e un file secondario esterno in cui vengono caricati i contenuti in modo dinamico. In questo modo si può inviare al file secondario una variabile che indica quali contenuti vanno caricati nel secondo file.

Ti consigliamo anche