在显示AS3后卸载动态加载的swf

时间:2011-07-08 12:07:10

标签: actionscript-3 loader nsurlrequest addchild

我正在做一个我需要使用大量视频剪辑的演示文稿。我使用Loader动态加载所有这些视频。我使用这样的代码片段:

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

一 现在的问题是:当我说第7个时,它开始滞后。我不知道为什么,但我认为这是因为一切都被加载到内存中。有没有办法在显示后从内存中删除视频?或者还有其他解决方案吗?

2 个答案:

答案 0 :(得分: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 :(得分:0)

我想我找到了解决方案。如果你使用removeChild,它只会停止显示,但整个事情仍在内存中(缓存)。因此,加载视频的次数越多,填充缓存的次数就越多。我们需要的是在加载另一个视频之前完全清除缓存的内容。

我使用了unloadAndStop()并且它似乎已完全完成了这个技巧,除非有人反对它。

再次感谢