Strano ma vero, l’actionscript 3 del flash player 9 sembra avere un bug: la rimozione di swf esterni (caricati col metodo loader.load() ) risulta per alcuni aspetti veramente difficoltosa. Ma andiamo con ordine.

Con actionscript 2 l’utilizzo di swf esterni che vengono caricati sul filmato principale è una pratica molto diffusa, poichè in questo modo si riducono le dimensioni del swf iniziale e i caricamenti dei swf esterni avvengono solo quando vi è una esplicita richiesta (ad esempio quando si entra in una apposita area). Il tutto avveniva con loadMovie() o loadMovieNum() , per poi eliminare il tutto con unloadMovie() o unloadMovieNum() e questa eliminazione era totale, ossia non accadeva più niente riguardante il swf tolto dallo stage.

Con actionscript 3 questa pratica rimane, semplicemente cambiano i metodi di caricamento dell’swf esterno, il codice si allunga un pò ma risulta sicuramente impostato in maniera più regolare (come un vero e proprio linguaggio di programmazione). I problemi sorgono invece nella fase di rimozione dell’swf, infatti i vecchi comandi di AS2 sono stati sostituiti con unload() , di conseguenza ci si aspetta uno stesso comportamento del nuovo comando, soprattutto perchè quelli vecchi erano veramente molto usati dai flash designers.

Invece unload() sembra semplicemente togliere la visualizzazione sullo stage e rimuove l’elemento rispetto al suo loader al quale è connesso, ma non toglie ogni riferimento all’swf esterno, ad esempio i listener ENTER_FRAME o i suoni / video che continuano ad essere riprodotti, risultando il tutto sgradevole ed inaccettabile.

In effetti, a quanto sembra è stata proprio volontà dei programmatori dell’Adobe, inserire un simile comando, ma sicuramente si sono scordati di crearne un altro che funzionava come quello dell’AS2, lasciando ai flashisti la possibilità di scegliere il comando che preferivano. In effetti non esiste una soluzione definitiva sul Flash Player 9, molti ci hanno sbattuto la testa ma niente….

Le soluzioni però ci sono, è sono le seguenti 2:

1) impostare come lettore predefinito Flash Player 10 e utilizzare il comando unloadAndStop() , che rappresenta proprio quel comando che si erano scordati i programmatori dell’Adobe, come detto precedentemente. La soluzione sembra in questo caso definitiva, l’unico problema (che sparirà col tempo) è rappresentato dalla necessità allora di usare il Player più recente (con livelli di diffusione ovviamente più scarsi del Flash Player 9) e il Flash CS4 (il CS3 standard non può esportare direttamente in Flash Player 10). Probabilmente fra un anno questi problemi spariranno e non ci penseremo più ;-)

Ecco un link ufficiale Adobe che spiega in profondità la soluzione.

2) poter accedere al sorgente dell’swf caricato e impostare dei listener al momento della rimozione dallo stage, che blocchino le funzioni di ENTER_FRAME o i suoni / video, che altrimenti verrebbero inesorabilmente riprodotti. I listener da utilizzare sono:

addEventListener(Event.REMOVED, togliVideo);
addEventListener(Event.REMOVED_FROM_STAGE, togliVideo);

che possono collegarsi alla stessa funzione, in questo modo appena richiamiano il comando unload() l’swf verrà tolto dallo stage e lo stesso riceverà il listener di rimozione dallo stage.

I comandi nella funzione richiamata col listener in questione inclusi potrebbero essere vari , a seconda della necessità di rimozione:

removeEventListener(Event.ENTER_FRAME, funzioneInOgniFrame); //per togliere l’Enter_Frame

SoundMixer.stopAll(); //per togliere tutti i suoni, TUTTI

nomeDelPlayerVideo.stop(); //per stoppare i video

Ovviamente questo secondo metodo non può essere usato se non potete accedere al sorgente del file caricato, quindi rimane il primo.

Possono esistere anche altri consigli per superare il problema col Flash Player 9, ma sono sempre parziali e spesso inutili. Aggiungo un link ad un post in inglese molto interessante a riguardo.

3 risposte to “Rimuove swf esterno in AS3, col comando Unload o UnloadAndStop (fp 10)”

  1. lignano Says:

    finalmente una funzione che stoppa tutto… miiitico
    Alby

  2. ANTHONY Says:


    MedicamentSpot.com. Canadian Health&Care.No prescription online pharmacy.Best quality drugs.Special Internet Prices. High quality drugs. Order pills online

    Buy:Advair.Aricept.Ventolin.Cozaar.Female Pink Viagra.Nymphomax.Seroquel.Buspar.Lasix.Zetia.Female Cialis.Acomplia.Prozac.Lipothin.Zocor.SleepWell.Lipitor.Benicar.Amoxicillin.Wellbutrin SR….

  3. interior Says:

    Party http://dthinkpada-j89.APTAUTOPARTS.INFO/tag/Party+interior+pictures/ : interior…

    Party…

Leave a Reply