2010-01-09 39 views
0

我一直使用加載程序將很多上傳圖像加入到我的動畫片段中。但是我知道如何做到這一點的唯一方法是加載內容,添加一個事件監聽器,等待它完成處理器中的作業,像這樣使用對加載器的引用。使用加載程序而不創建參考

protected function loadImage(imageDir:String):void 
     { 
      loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.INIT,tilesLoadInit); 
      loader.load(new URLRequest(imageDir)); 
     } 
private function tilesLoadInit e:Event):void { 
       sprite = Bitmap(loader.content).bitmapData; 
       //load in xml file for map 
       xmlToArray(); 
     } 

我想讓我的代碼更輕。我寧願在方法中本地調用我的loader:Loader類,而不是在我的類中進行引用。有沒有辦法在我的處理程序的Event.INIT參數中檢索加載器對象?

與一般的精靈一樣。假設我創建了一個按鈕。用戶點擊它並調用處理程序。有無論如何,我可以檢索該按鈕,通過Event參數從舞臺上刪除它,而不是創建類引用來刪除它們。

我想這樣做,使垃圾收集更容易。所以不要創建我所有對象的類引用。我寧願在本地打電話給他們,所以當我把他們從舞臺上移開時,垃圾收集器會照顧他們。

回答

1

您可以在事件偵聽器中使用event.currentTarget以獲取對註冊事件偵聽器的對象的引用。

private function localFunc():void 
{ 
    var btn:Button = new Button(); 
    btn.addEventListener(MouseEvent.CLICK, onClick); 
} 
private function onClick(e:MouseEvent):void 
{ 
    //e.currentTarget is typed as Object: in order to assign it to a 
    //variable of type Button, you must cast it accordingly. 
    var btn:Button = Button(e.currentTarget); 
} 

在裝載機事件的情況下,currentTarget將是相關聯LoaderInfo對象。 LoaderInfo有一個loader屬性指向原始的Loader對象。

private function tilesLoadInit(e:Event):void 
{ 
    var linfo:LoaderInfo = LoaderInfo(e.target); 
    var ldr:Loader = linfo.loader;//this is the Loader you wanted 
} 

targetcurrentTarget屬性將在事件的LoaderInfo相同,但也可以是在按鈕和其他顯示對象不同。例如,將單擊事件偵聽器添加到按鈕並單擊該按鈕的子項的文本字段時,event.target將成爲文本字段,並且event.currentTarget將成爲按鈕。基本上,target將包含觸發事件的確切對象,並且currentTarget將成爲當前正在執行的事件偵聽器註冊的對象。


至於垃圾收集,您必須在垃圾收集器清除它之前從相應的對象中刪除事件偵聽器。或者,您可以在添加事件偵聽器時使用弱引用,方法是在addEventListener方法中設置第五個參數true。垃圾收集器在檢查對象是否符合垃圾收集條件時不會計算弱引用。

但是,如果您對局部變量使用弱引用,則該對象可能會在其超出範圍(即方法返回時)後立即得到GC'ed,如果該對象沒有更多引用,並且事件監聽器可能根本不會被調用:這不是按鈕的問題,因爲您可能在返回之前將它們添加到顯示列表中,從而爲其創建強大的引用。


使用Event.COMPLETE,而不是Event.INIT閱讀的內容。從livedocs

complete - 在文件加載完成由相關LoaderInfo對象調度。

init - 在加載的SWF文件的屬性和方法可訪問時由關聯的LoaderInfo對象分派。 init事件始終在complete事件之前。

+0

它似乎工作到目前爲止。謝謝 – numerical25 2010-01-09 08:29:22

相關問題