Continuano i Tutorial di ActionScript3 su JuliusDesign, oggi andiamo a vedere come caricare un filmato SWF esterno in ActionScript 3

In ActionScript 3.0 le cose sono molto cambiate, infatti in questo caso per caricare un swf esterno utilizzeremo la classe Loader

Il codice ActionScript base è il seguente:

var loader:Loader = new Loader();
loader.load(new URLRequest("filmato_esterno.swf"));
addChild(loader);

In questo caso viene caricato un swf esterno di nome filmato_esterno sullo stage a coordinate x 0 e y 0

Se invece volessimo caricare il nostro filmato swf esterno in un determinato clip filmato vi basterà associarlo al metodo addDild come vediam in questo esempio:

var loader:Loader = new Loader();
loader.load(new URLRequest("filmato_esterno.swf"));
my_mc.addChild(loader);

In questo caso viene caricato un swf esterno di nome filmato_esterno all’interno di un clip filmato di nome istanza my_mc

Vediamo invece un codice un pò più complesso per aver maggiore controllo su quello che succede

// Creo un oggetto URLRequest con parametro del file esterno da caricare
var request:URLRequest = new URLRequest("filmato_esterno.swf");
// Creo un nuovo oggetto della classe Loader
var loader:Loader = new Loader();
// Aggancio un listener che verifica il fine caricamente è richiama una funzione
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
// Inizializzo la funzione completeHandler, che verrà richiamata quando il contenuto esterno è caricato completamente
function completeHandler(event:Event) {
trace("Caricamento completato!");
}
// Richiamo il metodo load, che decreta l'avvio del caricamento esterno
loader.load(request);
// Aggiungo l'oggetto Loader al clip my_mc attraverso il metodo addChild()
my_mc.addChild(loader);

In questo caso grazie alla classe contentLoaderInfo posso controllare determinate azioni in questo caso la fine del caricamento fancedomi stampare in output la scritta “Caricamento completato!”

Per la classe Loader è possibile monitorare tramite l’ oggetto LoaderInfo i seguenti eventi:

  • complete: Richiamato a caricamento avvenuto correttamente;
  • httpStatus: Richiamato in caso di richiesta HTTP, nel momento in cui il Flash Player può recuperare il codice di stato http;
  • init -> Richiamato quando le proprietà e i metodi dell’swf caricato dall’esterno, risultano accessibili e utilizzabili;
  • ioError: Richiamato in caso di errore di caricamento;
  • open: Richiamato nel momento in cui parte la richiesta di caricamento attraverso il metodo load();
  • progress: Richiamato costantemente a brevi intervalli, durante tutto il caricamento;
  • unload: Richiamato quando un oggetto caricato viene rimosso.

Come al solito ecco i file sorgenti con i quali approcciarsi meglio al codice, alla prossima lezione di AS3

Scarica il sorgente
Guarda il Tutorial

Author

Strategy Director @AQuest ~ Docente Master @NinjAcademy

16 Commenti

  1. Le immagini che hai usato per la rubrica dei tutorial as3 sono troppo forti! Poi questa spacca troppo grande!

  2. Ciao volevo chiederti una cosa in merito a questo tutorial! Premetto che non ho molta dimestichezza con AS3!
    Se volessi caricare il file swf con delle coodinate x, y generiche diverse da x=0, y=0 come si fà?

    grazie Ancora per i tuoi tutorial!

    Angelo

  3. Ciao! Un problema a riguardo apparentemente banale:
    Se all’swf che carico volessi inviare un parametro/variabile sai come fare?

    var loader:Loader = new Loader();
    loader.load(new URLRequest(“filmato_esterno.swf”));
    my_mc.addChild(loader);

    Grazie,
    A

  4. midavigo

    caricando più swf esterni l’audio continua in sottofondo, come toglierlo?

  5. Giuseppe

    Ciao, ogni volta che carico un altro swf l’audio del video continua……..è possibile eliminarlo?

  6. Ciao Giuliano,
    potresti aiutarmi a risolvere un problema?
    in pratica quando carico un swf esterno:
    ——————————————
    var test:Loader = new Loader();

    test.contentLoaderInfo.addEventListener(Event.COMPLETE, fineCaricamento)

    function fineCaricamento(loadEvent:Event)
    {
    addChild(loadEvent.currentTarget.content);
    }

    test.load(new URLRequest(“cartina.swf”))
    —————————————————

    mi carica una mappa draggabile che al primo accesso il drag funziona ma quando navigo nelle altre voci menù e poi ritorno alla voce menù che contiene la mappa il drag non funziona più.

    L’area draggabile viene attivata da on MouseDown mentre se uso OnPress il problema di cui sopra non avviene (il drag funziona tutte le volte che ci accedo)

    Sò che è molto complicato a spiegare il tutto ma spero che tu abbia ugualmente capito tutto. :)

  7. ottimo tutorial grazie, ma per fare l’inverso ?
    avrei la necessità di inviare semplici comandi in actionscript 3 da un swf esterno, verso il contenitore che lo ha caricato, in modo da spostare la timeline principale di un frame.

    In as2 se nn ricordo male, bastava scrivere qualcosa del genere nel file swf caricato:

    _leveo0.gotoAndStop(2);

    nn riesco a convertirlo in as3

    grazie in anticipo

  8. roberta

    ciao Julius,
    problema…..
    nella mia timeline ho un livello dove ad ogni frame carico le mie pagine…
    nel primo frame nel livello action inserisco il seguente codice

    codice:
    var request:URLRequest = new URLRequest(“monolocali.swf”);
    var loader:Loader = new Loader()
    loader.load(request);
    addChild(loader);

    e tutto funziona…… lo inserisco nel secondo frame e mi da questo errore……

    Symbol ‘all content movie’, Layer ‘Layer 2’, Frame 3, Line 1
    1151: A conflict exists with definition request in namespace internal

    qual è il conflitto e cosa devo inserire nel secondo frame per caricare gli altri file esternamente..?
    grazie

  9. Giuseppe

    Ciao Julius , io ho provato il codice che hai usato e funziona alla grande (dopo ben 4 ore di ricerche!!)

    Ma…una domanda: come faccio a posizionare l’swf dato che me lo posiziona sempre in alto a sinistra? io ho scaricato il tuo sorgente , ho aperto il fla e ho provato a spostare il clip filmato trascinando il cerchio in un punto diverso e si sposta!!

    ho sostituito nel codice: filmato_esterno.swf con il nome del mio filmato (che è una galleria con i pulsanti laterali) per poter richiamare il mio filmato e non quello.Provo a spostare il cerchietto ma nulla! questa maledetta galleria si posiziona sempre in alto a sinistra

    come devo fare? :( ti prego aiutami…sono già due giorni che ci combatto.Se risolvo il problema ho finito il sito :(

    Grazie anticipatamente
    sei un grande

    ps: ecco il codice (che non è nient’altro che il tuo):

    // Creo un oggetto URLRequest con parametro del file esterno da caricare
    var request:URLRequest = new URLRequest(“slide.swf”);
    // Creo un nuovo oggetto della classe Loader
    var loader:Loader = new Loader();
    // Aggancio un listener che verifica il fine caricamente è richiama una funzione
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
    // Inizializzo la funzione completeHandler, che verrà richiamata quando il contenuto esterno è caricato completamente
    function completeHandler(event:Event) {
    trace(“Caricamento completato!”);
    }
    // Richiamo il metodo load, che decreta l’avvio del caricamento esterno
    loader.load(request);
    // Aggiungo l’oggetto Loader al clip my_mc attraverso il metodo addChild()
    my_mc.addChild(loader);

  10. salvatore

    grande tutorial… ho solo un problema… il file caricato resta sull’immagine iniziale e non riproduce tutto il file swf importato… come posso risolvere il problema?

  11. salvatore

    salve Julius
    è possibile oltre ad importarlo anche ridimensionarlo?
    grazie e buona giornata
    Salvatore

  12. gcpmusic

    Ciao Julius
    avresti un esempio in actionscript 2 del caricamento di swf dentro un’ altro swf?

    Grazie in anticipo

Commenti