2011-07-03 29 views
0

影片剪輯因此,繼承人的作品裝載機:轉向裝載機內容到AS3

public var loaders:Array = new Array(); 
public var loaderClip:Array = new Array(); 
    function loadPersonmenu() { 

     var person:Array = new Array(); 
     var url:Array = new Array(); 
     var cityUrl:Array = new Array(); 

     for (var i = 0; i < personNumber; i++) { 
      loaders.push(new Loader()); 
      loaders[i].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener); 
      loaders[i].addEventListener(MouseEvent.MOUSE_OVER, lightUp); 
      person.push("person" + i + ".swf"); 
      url.push(new URLRequest(person[i])); 
      loaders[i].load(url[i]); 
      loaders[i].x = ((i + 1) * margin) + (i * videoWidth); 
      loaders[i].alpha = .5; 
      container.addChild(loaders[i]); 
      } 
} 

一切都太棒了,超級騙子,真棒。但是,當我添加一些行來將加載器內容視爲MovieClip(所以我可以將stop()函數應用於它)時,編譯器會爆炸成一個錯誤 - 嘉年華。我所有漂亮的外部swf都消失了。 (新線處於與評論底部附:

public var loaders:Array = new Array(); 
public var loaders:Array = new Array(); 
    function loadPersonmenu() { 

     var person:Array = new Array(); 
     var url:Array = new Array(); 
     var cityUrl:Array = new Array(); 


     for (var i = 0; i < personNumber; i++) { 
      loaders.push(new Loader()); 
      loaders[i].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener); 
      loaders[i].addEventListener(MouseEvent.MOUSE_OVER, lightUp); 
      person.push("person" + i + ".swf"); 
      url.push(new URLRequest(person[i])); 
      loaders[i].load(url[i]); 
      loaders[i].x = ((i + 1) * margin) + (i * videoWidth); 
      loaders[i].alpha = .5; 
      container.addChild(loaders[i]); 
      loaderClip[i] = MovieClip(loaders[i].content); // Here is a new line 
      loaderClip[i].stop(); // Here is another new line 
     } 
} 

這是我的錯誤:

類型錯誤:錯誤#1009:在菜單不能訪問空對象引用的屬性或方法 /loadPersonmenu() 在菜單/ fileCompleteListener() 在flash.events::EventDispatcher/dispatchEventFunction() 在flash.events::EventDispatcher/dispatchEvent() 在flash.net::URLLoader/onComplete()

奇怪的是ng是,我的函數fileCompleteListener()甚至沒有保留任何這些Loader實例或swfs,這就是爲什麼我沒有將它包含在我的代碼中的原因。這在第一個conde中不是問題

回答

3

您似乎沒有給加載器加載任何東西的機會,所以loaders[i].content爲空。

在嘗試訪問加載程序內容之前,請先收聽整個事件。由於您使用的是多個裝載器,因此您還應該使用i爲每個裝載器分配一個實例名稱,以便您可以使用一個通用完整的偵聽器並引用裝載器名稱以將內容分配給正確的索引loaderClip

//in the loop 
loaders[i].name = i; 
loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler); 

////////////////////////////////////////////////// 

//complete handler method 
private function loadCompleteHandler(evt:Event):void 
{ 
    var index:int = int(Loader(LoaderInfo(evt.target).loader).name); 
    loaderClip[index] = LoaderInfo(evt.target).content; 
} 
+0

謝恩,你的代碼給我帶來無法形容的喜悅。 –

+0

但我很好奇,爲什麼LoaderInfo(evt.target).content;而不只是evt.target.content? –

+0

我習慣於使用一個抱怨寬鬆打字的編輯器,因爲它成爲我所做的一切的習慣。 'evt.target.content'也會起作用,就像'evt.target ['content']' – shanethehat