2009-12-09 63 views
0

最近在一個項目中,我配置了自定義Loader類如下 首先,我定義我的裝載機作爲一家民營variabelAS3裝載機類的最佳實踐

private var _myLdr:Loader 

//Then in the constructor 

_myLdr = new Loader();   
_myLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, doneImgLoad); 
_myLdr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress); 
_myLdr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

然後終於,當我需要加載一個新的資產我打電話通過公共方法

_myLdr.load(new URLRequest ('myswftoLoad.swf')); 

到目前爲止好....除非你使用的FlashPlayer 9.024的調試版本來查看您的網頁在這種情況下,你會得到

我Loader實例
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. 
    at flash.display::Loader/_load() 

WTF ??? !!

所以糾正我需要實例化一個新的裝載機每次我打開一個新的資產。

有人能告訴我哪種方法會被認爲是「最佳實踐」嗎?

回答

0

一個Loader實例可以有utmost one child在同一時間。在發佈具有相同Loader實例的後續load()請求之前,請撥打_myLdr.unload();。這就是說,我寧願爲每個負載創建一個新的Loader實例(並確保先前的實例在不再需要時正確卸載)。

+0

試過了,我仍然得到「 引發ArgumentError:錯誤#2025:提供的DisplayObject必須是調用者的子。 \t在flash.display使用::裝載/卸載()」 ....但奇怪的是,我只用了9.024版本的調試播放器,而不是調試播放器版本10得到的錯誤。每次加載外部資產時創建一個新的Loader實例的另一個原因似乎與直覺相反,我認爲每個新的Loader實例都會在應用程序使用的內存中添加少量內容。在我的情況下,該應用程序在一個信息亭設置中使用,我試圖避免任何內存泄漏.... – 2009-12-09 10:47:59

+0

我們將假設'最佳實踐'將創建新的Loader實例(每次與關聯的偵聽器「。但也有一個'清除'方法,可以將顯示列表及其監聽器中的加載器除去。 – 2009-12-09 11:00:11

+0

您是否將'loader.content'添加到其他父代?默認情況下,它將是相應'Loader'的子代加載它的對象 - 我想unload方法可能會調用'loader.remove(loader.content)',如果你將loader.content添加到其他東西,將會失敗。 – Amarghosh 2009-12-09 11:25:49