2010-03-02 26 views
7

Merhaba, MovieClip'e harici bir swf yüklüyorum ve oynatmayı seçene kadar durmasını istiyorum. Şu anda hemen yükleme üzerine oynuyor. AS3 Harici swf'yi durdur

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

Yani durur ama ilk kareyi oynayacağı, orada bunu durdurmak Film klibi için Event.ENTER_FRAME ekleme ve çalıştı. Play'i seçene kadar yüklendiğinde durmasını sağlamak için bir yol var mı?

+0

Bunun için bir çözüm buldunuz mu? Bu konudaki Adobe dokümantasyonunun var olmadığı anlaşılıyor :-( –

+0

Eğer sahnede canlandırılan movieclips/sprite'lara sahip bir SWF yüklüyorsanız, o zaman çocukların animasyonunu durdurmalısınız. –

cevap

1

Bu basit TestCase'i yazdım ve gayet iyi çalışıyor ... yüklenen swf oldukça basit, sadece ana zaman çizelgesinde bir ara.

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

Aslında Jochen Hilgers'ın önerdiği şeye çok yakın. Ancak, bu durumda, istediğiniz olay aslında COMPLETE yerine INIT olur. İçerik henüz tam olarak yüklenmediğinde veya kullanıma hazır olduğunda (ve kendi başına oynamaya başlayacaktır) INIT başlatılır.

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

ile etkinliği ekleyin ve sen bir MovieClip olarak currentTarget ait content özelliği döküm olduğunu fark edeceksiniz

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

ile idare ve olmuştur önce bile durdurmak sahneye bağlı.

bir PROGRESS olayın (veya bir INIT veya COMPLETE olay öncesinde herhangi bir zamanda) içinde content özelliğini kullanmak güvenli olmadığına dikkat etmek önemlidir. Nesnenin hazır olmadığı etkisine bir hata alırsınız.

0

Benzer bir problem/çözüm arıyordum ama benim sorunum biraz farklıydı. Bunun senin sorunun olmadığını biliyorum, ama çözümümü paylaşmak için adil görünüyor. Bir yükleyicinin içerikli

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

yapmaya çalıştığında, benim Flaş IDE bana bu hatayı gösterdi: "Mülkiyet flash.display.AVM1Movie bulunmayan dur ve hiçbir varsayılan değer yok"

İthal ettiğim swf, AS1 kullanılarak değil, ana film olarak AS3 kullanılarak oluşturulduğundan (bu yüzden swf'yi bir flaya dönüştürdüm ve as3'ü kullanarak yeniden derledim, bu After Effects'ten çıktı) çünkü bu bana oldu. Artık AVM1 ve AVM2'nin actionscript 1 ve 2 dosyalarını temsil eden sınıflar olduğunu biliyorum.