2011-04-01 79 views
0

我在Flash中存在內存使用問題,我成功卸載並從舞臺上刪除加載的 SWF,但我無法刪除加載的內存,並且fps也從30下降到了18。在ActionScript 3.0中卸載多個SWF問題

  1. 我如何加載SWF到內存中

    • swfUrlArray陣列其中i保持SWF名(addreses恩。 「intro.swf」)。
    • 我有swfModules Dictonary在哪裏我保持加載的SWF的。

    我加載它們是這樣的:

    mLoader = new Loader(); 
    var mRequest:URLRequest = new URLRequest(url); 
    mLoader.load(mRequest); 
    mLoader.x = pozX; 
    mLoader.y = pozY; 
    swfModules[url] = mLoader; 
    swfUrlArray.push(url); 
    currentLoaded = url; 
    addChild(mLoader); 
    
  2. 刪除SWF在循環

    for(var i=0; i < swfUrlArray.length; i++) { 
        if(swfModules[swfUrlArray[i]] != null) { 
         swfModules[swfUrlArray[i]].unloadAndStop(); 
         removeChild(swfModules[swfUrlArray[i]]); 
        } 
        swfUrlArray=[]; 
    } 
    

    我這裏懷疑的是,循環太快閃爍卸載SWF的內存爲 所有文件同時。 請對此問題提出任何建議或解決方案。


回答

0

是swfModules一個解釋?它似乎仍然擁有加載瑞士法郎的參考。使用delete swfModules[url]從詞典中刪除項目。

+0

我設置了像你建議刪除引用的代碼,但似乎仍然沒有效果,我在外部SWF中使用跟蹤,在卸載並刪除輸出中的外部SWF引用後仍然有跟蹤註釋。如果你有什麼想法可以請發表評論,我會繼續嘗試。謝謝阿甘。 – SpaceA 2011-04-01 13:47:42

1

您清除for循環中的swfUrlArray。所以它只會卸載並停止第一個,發現數組的長度爲0並停止。

修改後的代碼:

for(var i=0; i < swfUrlArray.length; i++) { 
    if(swfModules[swfUrlArray[i]] != null) { 
     swfModules[swfUrlArray[i]].unloadAndStop(); 
     removeChild(swfModules[swfUrlArray[i]]); 
    } 
} 
swfUrlArray=[]; 

,做@alxx說,關於去除詞典中的SWF引用。

+0

感謝球員,似乎有效果:),現在我認爲一些動畫導致快速增加內存使用量。我用addEventListener(Event.ENTER_FRAME,enterFrameHandler)測試了這個; 函數enterFrameHandler(事件:事件):void { \t trace(「Interval System Trace」+ System.totalMemory/1024); } – SpaceA 2011-04-01 13:20:45