2011-03-11 84 views
0

我有一個簡單的Flash圖像庫。它的工作方式是使用一個稱爲「picContain」的movieClip,它將圖像加載到它的alpha中,等待幾秒鐘,然後alpha,然後重複這個過程。AS3圖像加載器內存問題

代碼循環訪問圖像源的數組。它循環的次數與數組中的項相同。問題是,隨着時間的推移(大約15分鐘左右),加載圖像花費的時間越來越長。我猜這是因爲它不會卸載加載到包含影片剪輯的最後一張照片。下面是加載圖像我的代碼的一部分:

function imageLoaded(e:Event) { 
    imageLoader.width = 1013; 
    imageLoader.height = 760; 
    Bitmap(imageLoader.content).smoothing = true; 
    picContain.addChild(imageLoader); 
    alphUp(picContain); // my alpha up function 
} 

事情是,即使我想用picContain.removeChild(),我不能因爲removeChild在parentheses-需要一個實例名稱和這些片段沒有EM。是removeChild的解決方案?如果是這樣,我怎麼能得到它刪除任何在包含剪輯沒有指定?

感謝您的幫助。

回答

0

很簡單,通過使用picContain顯示對象容器的getChildAt()方法獲取ImageLoader的引用。你必須指定你的picContain顯示對象容器作爲getChildAt()的唯一參數的ImageLoader的索引(以下我認爲它在0):

picContain.removeChild(picContain.getChildAt(0)); 

,或者你可以簡單地使用removeChildAt()方法:

picContain.removeChildAt(0); 
0

剪輯確實有一個實例名稱,你只是不知道它們。跟蹤它 - 你可能會得到「實例23」或類似的東西。

上面的答案肯定適合你,但如果你邏輯不嚴密,可能會導致問題。如果沒有其他的參考資料(例如「名稱」或從擴展類派生的道具),您可能會刪除錯誤的內容。

另外 - 一定要妥善標記垃圾收集 - 這種情況是一個內存泄漏乞求發生。只要確保引用計數爲0,並在將它從顯示列表中移除後將instance = null。你應該設置。

祝你好運!

0

我不認爲問題是它需要更長和更長的時間來加載圖像 - 它更多的是,你永遠不會卸載每個圖像在那裏,我的猜測是你把它們全部保留在alpha = 0,而不是設置visible = false。

15分鐘圖像的所有設置alpha混合對對方很可能殺死你的計算機上:d

更長的加載時間可能是FPS落下的結果。

使用Taurayi的removeChildAt()建議。如果你有一個以上的孩子,把它放在一個while循環中:

while(picContain.numChildren > 0) 
    picContain.removeChildAt(0);