2010-03-02 3 views
7

Привет, я загружаю внешний swf в MovieClip, и я хочу, чтобы он остановился, пока я не захочу играть. В настоящее время он сразу после загрузки.AS3 Остановка внешнего swf

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

Так что я попытался добавить Event.ENTER_FRAME в мувиклип и остановить его там, что остановится, но он будет играть первый кадр. Есть ли способ заставить его остановиться при загрузке до тех пор, пока я не выберу Play?

+0

Вы когда-нибудь находили решение для этого? Документация от Adobe по этому вопросу представляется несуществующей :-( –

+0

Если вы загружаете SWF с анимированными мувиклипами/спрайтами на сцене, вам необходимо остановить() детскую анимацию –

ответ

1

Я написал этот простой TestCase, и он отлично работает ... загруженный swf довольно прост, всего лишь анимация на главной временной шкале.

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

Это на самом деле очень близко к тому, что предложил Йохен Хильгерс. Однако в этом случае вы хотите на самом деле INIT вместо COMPLETE. INIT увольняется, когда контент еще не полностью загружен, но готов к использованию (и он начнет играть сам по себе).

Приложить событие с

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

И справиться с

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

Вы заметите, что вы можете бросить content собственностью currentTarget как MovieClip и остановить его даже до того, как было прикрепленный к сцене.

Важно отметить, что это не безопасно использовать content собственность в PROGRESS случае (или в любое время до проведения INIT или COMPLETE события). Вы получите сообщение об ошибке, что объект не готов.

0

Я искал аналогичную проблему/решение, но моя проблема была немного различной. Я знаю, что это не ваша проблема, но выглядит честно, чтобы поделиться своим решением. Когда я попытался сделать

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

с содержанием грузчика, мой Flash IDE показал мне эту ошибку:

«Property прекращает не найден на flash.display.AVM1Movie и нет значения по умолчанию.»

Это произошло со мной, потому что swf, который я импортировал, был создан с использованием AS1, а не AS3 в качестве основного фильма (поэтому я декомпилировал swf на fla и перекомпилировал с использованием as3, это был результат After Effects). Теперь я знаю, что AVM1 и AVM2 являются классами, которые представляют файлы actionscript 1 и 2.

Смежные вопросы