2010-01-23 44 views
1

我成功地使用Loader::load()将swfs加载到我的主swf中,然后将它们添加为Sprite的子项。当发生其他事件时,我想根据需要删除swfs。我看过unload()removeChildAt()没有成功。卸载加载Loader :: load()的swfs

我只添加了addChild()调用来试图锁定加载的实例,以便我可以删除它。装载工作正常没有addChild();

我也尝试发布到播放器v.10和使用myLoader.unloadAndStop();但这也没有效果;

以下演示代码显示我的问题。我看到一个孩子被添加,一个被删除,但intro.swf仍然在玩。

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.display.LoaderInfo; 
import flash.net.URLRequest; 

var myLoader:Loader = new Loader(); 
var holderMC:Sprite = new Sprite(); 
var myRequest:URLRequest = new URLRequest('intro.swf'); 

myLoader.load(myRequest); 
holderMC.addChild(myLoader); 
trace("initial:"+holderMC.numChildren); // traces initial:1 

while(holderMC.numChildren > 0) { 
holderMC.removeChildAt(0); 
trace("now there are:"+holderMC.numChildren); // traces now there are :0 
} 
myLoader.unload(); 

// 编辑 - 也尝试:

myLoader.unloadAndStop(); 
myLoader = null; 

有什么想法?

回答

3

你绝对有其他事情在这里。首先,你如何看待“intro.swf”?您正在创建holderMC,并将加载的swf添加为孩子,但是何时将holderMC添加到显示列表中?

正确的方法从视图中删除的影片是:

holderMC.removeChild(myLoader); 

为了让holderMC的内容将被标记为垃圾收集你需要将其设置为null。所以,

holderMC.removeChild(myLoader); 
myLoader.unload(); // this will set the content (the movie itself) to null. 
myLoader = null; // npw the loader can be garbage collected too 

如果你正在做一个removeChild之和仍呈现,那么您将需要发布更多的代码,显示问题出在哪里还真是。

+0

谢谢你的回答!我*认为*问题在于我将旧的AS2文件转换为AS3,而当我开始使用新文件并使用您的建议时问题已解决。谢谢! – jerrygarciuh 2010-01-25 22:11:15