2010-03-02 14 views
7

Ciao Sto caricando un swf esterno in un Movie Clip, e voglio che si fermi finché non scelgo di giocare. Attualmente gioca sul caricamento immediato.AS3 Stop swf esterno

var mc:MovieClip; 

var swfLoader:Loader = new Loader(); 
swfLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, eventLoaded); 
var request:URLRequest; 
request = new URLRequest("external.swf"); 
swfLoader.load (request); 

function  eventLoaded(e:Event): void 
{ 
    mc = e.target.content as MovieClip; 
// does not stop the clip 
    mc.Stop(); 
} 

Così ho provato ad aggiungere un Event.ENTER_FRAME al movieclip e fermarsi lì, che si fermerà, ma si giocherà il primo fotogramma. C'è un modo per farlo arrestare quando viene caricato fino a quando non scelgo Riproduci?

+0

Hai mai trovato una soluzione per questo? La documentazione di Adobe su questo argomento sembra inesistente :-( –

+0

Se si sta caricando un file SWF che ha animato Movie/Sprite sul palco, è necessario interrompere() l'animazione dei bambini –

risposta

1

Ho scritto questo semplice TestCase e funziona perfettamente ... lo swf caricato è piuttosto semplice, solo un'interpolazione sulla timeline principale.

package { 
    import flash.display.Loader; 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLRequest; 

    public class Test extends Sprite 
    { 
     private var loader:Loader = new Loader; 

     public function Test() 
     { 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoaded); 
      loader.load(new URLRequest('testFile.swf'));  
     } 

     public function handleLoaded(event:Event):void 
     { 
      addChild(loader.content); 
      var mc:MovieClip = loader.content as MovieClip ; 
      mc.stop(); 
     } 
    } 
} 
6

In realtà è molto vicino a quello che Jochen Hilgers suggerito. Tuttavia, in questo caso, l'evento desiderato è in realtà INIT anziché COMPLETE. INIT viene generato quando il contenuto non è ancora completamente caricato ma è pronto per l'uso (e inizierà a essere riprodotto autonomamente).

Fissare l'evento con

loader.contentLoaderInfo.addEventListener(Event.INIT, handleReady); 

e maneggiarlo con

public function handleReady(initEvent:Event):void{ 
     MovieClip(initEvent.currentTarget.content).stop(); 
} 

Si noterà che si può lanciare la proprietà content di currentTarget come una MovieClip e fermarlo prima ancora che è stato attaccato al palco.

E 'importante notare che non è sicuro di utilizzare la proprietà content in un evento PROGRESS (o in qualsiasi momento prima di un evento o di INITCOMPLETE). Si otterrà un errore nell'effetto che l'oggetto non sia pronto.

0

Stavo cercando un problema/soluzione simile, ma il mio problema era poco diverso. So che questo non era il tuo problema, ma sembra giusto condividere la mia soluzione. Quando ho provato a fare

event.currentTarget.stop(); // AS1&AS2 -> BAD swf to import 

con il contenuto di un caricatore, il mio IDE Flash mi ha mostrato questo errore:

"Stop proprietà non trovato sul flash.display.AVM1Movie e non v'è alcun valore di default."

Questo è accaduto a me, perché l'ho importato swf è stata creata usando AS1, e non AS3 come il film principale (così ho decompilato lo swf in un fla e ricompilati utilizzando AS3, è stata un'uscita da After Effects). Ora so che AVM1 e AVM2 sono classi che rappresentano i file actionscript 1 e 2.