0

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

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

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

4

2 回答 2

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;
}
于 2011-07-08T12:34:24.527 回答
0

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

我使用了 unloadAndStop() ,它似乎已经完全成功了,除非有人反对它。

再次感谢

于 2011-07-08T23:08:49.633 回答