2010-03-02 13 views
7

Hola, estoy cargando un swf externo en un MovieClip, y quiero que se detenga hasta que elija jugar. Actualmente juega con la carga de inmediato.AS3 Detener swf externo

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

así que he intentado añadir un Event.ENTER_FRAME al clip de película y dejar de allí, que no se detendrá pero jugará el primer fotograma. ¿Hay alguna manera de que permanezca detenido cuando se carga hasta que elijo Jugar?

+0

¿Alguna vez encontró una solución para esto? La documentación de Adobe sobre este tema parece no existir :-( –

+0

Si está cargando un archivo SWF que tiene animaciones/sprites animados en el escenario, debe detener() la animación de los niños –

Respuesta

1

Escribí este TestCase simple y funciona bien ... el swf cargado es bastante simple, solo una interpolación en la línea de tiempo principal.

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

De hecho, es muy parecido a lo que sugirió Jochen Hilgers. Sin embargo, en este caso, el evento que desea es realmente INIT en lugar de COMPLETE. INIT se activa cuando el contenido aún no está completamente cargado pero está listo para su uso (y comenzará a reproducirse por sí mismo).

Acople el evento con

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

, procediendo con

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

Se dará cuenta de que puede convertir la propiedad de contentcurrentTarget como un clip de película y detenerlo antes de que haya sido unido al escenario.

Es importante tener en cuenta que no es seguro de usar la propiedad content en un PROGRESS evento (o en cualquier momento antes de un evento o INITCOMPLETE). Obtendrá un error en el sentido de que el objeto no está listo.

0

Estaba buscando un problema/solución similar, pero mi problema era un poco diferente. Sé que este no era su problema, pero parece justo compartir mi solución. Cuando traté de hacer

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

con el contenido de un cargador, mi Flash IDE me mostró este error:

"STOP propiedad no se encuentra en flash.display.AVM1Movie y no hay ningún valor predeterminado."

Esto me pasó porque el swf que importé se creó utilizando AS1, y no AS3 como la película principal (por lo que descompilé el swf en un fla y recompilamos usando as3, era una salida de After Effects). Ahora sé que AVM1 y AVM2 son clases que representan los archivos actionscript 1 y 2.

Cuestiones relacionadas