1

我已经加载了一个外部 swf 文件,它在加载 swf 时默认播放一个 flv 文件。现在的问题是如何从内存中删除 swf 文件。我的代码:

var myLoader:Loader = new Loader();                     
var url:URLRequest = new URLRequest("ExternalSWF.swf");  
myLoader.load(url);                                     
detailMovieClip.movieHolder.addChild(myLoader);

我尝试了许多 removeChild、unload 和 unloadAndStop 的组合,但没有一个有效。我认为这一切都与没有正确引用有关。

更新:

我接受了 Jegan 的回答,但它仅在我在一个只有 1 个 numChildren 的虚拟项目中进行测试时才有效,但是在现实世界的代码示例中 numChildren 报告了 22 个,所以我不确定这是否会成为问题。这是真实世界的代码:

var myImageLoader:Loader;
var myImageRequest:URLRequest;
var theImagePath:String;

//part from xml processor function

theImagePath = "flash/"+myXML..item_video_link[n];
loadTheMovie(theImagePath);

function loadTheMovie(theImagePath):void{

myImageLoader = new Loader();
myImageRequest= new URLRequest(theImagePath);
myImageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,showMeTheVideo);
myImageLoader.load(myImageRequest);

}

function showMeTheVideo(evt:Event):void{

 detailsMovieClip_mc.details_video_holder.dynamicVideoHolder.addChild(myImageLoader);

}

stopVideo(sectionname):viod{

if(detailsMovieClip_mc.details_video_holder.dynamicVideoHolder.numChildren !=0){  

trace("what is the number of children: "+numChildren);

 myImageLoader.unloadAndStop();

 detailsMovieClip_mc.details_video_holder.
 dynamicVideoHolder.removeChild(myImageLoader);


}
}
4

2 回答 2

1
stage.addEventListener(MouseEvent.CLICK, removeSWF);
function removeSWF (e:MouseEvent):void 
{
    if(detailMovieClip.movieHolder.numChildren !=0){        
        myLoader.unloadAndStop();

        detailMovieClip.movieHolder.removeChild(myLoader);// empty the movieClip memory
    }
}

或命名您的Loader实例,然后使用搜索getChildByName

myLoader.name = "myloader";

function removeSWF (e:MouseEvent):void 
    {
        if(detailMovieClip.movieHolder.numChildren !=0){        
            Loader(detailMovieClip.movieHolder.getChildByName("myloader")).unloadAndStop();
        detailMovieClip.movieHolder.removeChild(detailMovieClip.movieHolder.getChildByName("myloader"));// empty the movieClip memory
        }
    }
于 2012-08-10T05:33:07.463 回答
0

我猜这是因为您将加载程序添加到场景中。

要么你想保持这种行为,在这种情况下有一个快速修复,通过使用 removeChild() 从 MovieClip 中删除加载器,然后将引用设置为 null,或者使用 delete 关键字。

要么您想正确执行此操作,在这种情况下,请侦听 LOADED 事件,将 loader.content 包含的 MovieClip 添加到目标 MovieClip。然后,当您要卸载它时,使用 removeChild() 将剪辑从容器中删除,然后使用 loader.unload()。

于 2012-08-10T14:27:06.043 回答