2011-07-08 51 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