2011-07-08 47 views
0

我正在做一個演示文稿,我需要使用大量的視頻剪輯。我使用Loader動態加載所有這些視頻。我使用的代碼片段是這樣的:顯示它後卸載動態加載的SWF AS3

var req:URLRequest = new URLRequest("video.swf"); 
var a:Loader = new Loader(); 
a.load(req); 
stage.addChild(a); 

一個 現在的問題是:當我說7號之一,它開始落後。我不知道爲什麼,但我認爲這是因爲一切都被加載到內存中。有沒有辦法在顯示內容後從內存中清除視頻?或者還有其他解決方案嗎?

+0

當每個人完成後你會做什麼,事後清理? – shanethehat

+0

你只是打敗了我! 'removeChild'是這個問題的第一步:) –

回答

0

我想我找到了解決方案。如果你使用removeChild,它只會停止顯示,但整個事情仍然在內存(緩存)中。因此,您加載視頻的次數越多,填滿緩存的次數越多。我們需要的是在加載另一個視頻之前完全清除緩存的內容。

我用unloadAndStop(),它似乎已經完全做了這個伎倆,除非有人反對它。

再次感謝

1

如果您每次只加載一個新視頻並將其添加到舞臺上,您將擁有相當大的電影等級;都保持舞臺和記憶。

如果您保留對以前加載的電影的引用,則可以在加載「下一個」電影時將其從舞臺中刪除。沒有正確測試,但只是爲了讓你知道代碼可能看起來像什麼:

var oldLoader:Loader = null; 

var a:Loader = new Loader(); 
a.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete); 
a.load(<your url>); 

function loader_complete(e:Event):void { 
    var newLoader:Loader = e.currentTarget.loader as Loader; 

    stage.addChild(newLoader); 

    if(oldLoader != null) { 
     stage.removeChild(oldLoader); 
     oldLoader = null; 
    } 

    oldLoader = newLoader; 
} 
+1

我想我找到了解決方案。如果你使用removeChild,它只會停止顯示,但整個事情仍然在內存(緩存)中。因此,您加載視頻的次數越多,填滿緩存的次數越多。我們需要的是在加載另一個視頻之前完全清除緩存的內容。 我用unloadAndStop(),它似乎已經完全做了這個伎倆,除非有人有反對它的東西。 再次感謝 – Sthe

+1

絕對應該這樣做。有一些特殊情況下unloadAndStop不能正常工作。但在你的情況下,只是加載顯示,刪除它應該都很好。 – Bakapii