2010-03-02 9 views
7

Salut Je charge un swf externe dans un MovieClip, et je veux qu'il s'arrête jusqu'à ce que je décide de jouer. Actuellement, il joue immédiatement après le chargement.AS3 Stop swf externe

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

J'ai essayé d'ajouter un Event.ENTER_FRAME au movieclip et arrêter là, qui arrêtera, mais il jouera la première image. Y a-t-il un moyen de le faire rester arrêté lorsqu'il est chargé jusqu'à ce que je choisisse Play?

+0

Avez-vous déjà trouvé une solution pour cela? La documentation d'Adobe sur ce sujet semble être inexistante :-( –

+0

Si vous chargez un SWF qui a animé des MovieClips/sprites sur la scène, vous devez arrêter() l'animation des enfants –

Répondre

1

J'ai écrit ce simple TestCase et ça marche bien ... le swf chargé est assez simple, juste une interpolation sur le scénario 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

C'est en fait très proche de ce que Jochen Hilgers a suggéré. Cependant, dans ce cas, l'événement que vous voulez est en fait INIT au lieu de COMPLETE. INIT est déclenché lorsque le contenu n'est pas encore complètement chargé mais est prêt à l'emploi (et commencera à jouer tout seul).

Fixer l'événement avec

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

Et poignée avec

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

Vous remarquerez que vous pouvez lancer la propriété content de currentTarget comme MovieClip et l'arrêter avant même qu'elle ait été attaché à la scène.

Il est important de noter que ce n'est pas sûr d'utiliser la propriété content dans un événement PROGRESS (ou à tout moment avant un événement INIT ou COMPLETE). Vous obtiendrez une erreur à l'effet que l'objet n'est pas prêt.

0

Je cherchais un problème/une solution similaire, mais mon problème était peu différent. Je sais que ce n'était pas votre problème, mais semble équitable de partager ma solution. Quand j'ai essayé de le faire

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

avec le contenu d'un chargeur, mon IDE Flash m'a montré cette erreur:

« Propriété arrête pas trouvé sur flash.display.AVM1Movie et il n'y a pas de valeur par défaut. » Cela m'est arrivé car le swf importé a été créé en utilisant AS1, et non AS3 comme film principal (j'ai donc décompilé le swf en fla et recompilé en utilisant as3, c'était une sortie d'After Effects). Maintenant, je sais qu'AVM1 et AVM2 sont des classes qui représentent des fichiers actionscript 1 et 2.