在ActionScript 3.0中卸载多个SWF问题

时间:2011-04-01 08:48:30

标签: actionscript-3

我在flash中有内存使用问题,我成功卸载并删除已加载 SWF来自舞台,但我无法删除已加载的内存,而且fps也从30下降到18.

  1. 如何将SWF加载到内存中

    • 我有 swfUrlArray数组,其中我保留了SWF名称(addreses ex。“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的内存 所有文件同时。 请对此问题提出任何建议或意见。


2 个答案:

答案 0 :(得分:1)

清除swfUrlArray INSIDE你的for循环。所以它只会首先unloadAndStop,发现数组的长度为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引用的内容。

答案 1 :(得分:0)

swfModules是一个字典吗?似乎它仍然是加载swf的参考。使用delete swfModules[url]从词典中删除项目。