如何在AS3中完全停止和卸载外部加载的SWF声音?

时间:2012-01-09 13:38:07

标签: actionscript-3 flash external loader

我创建了一个flash播放器,可以加载外部swfs并通过stop,play,frwd按钮控制它们。外部swf添加到下一个上一个按钮上,单击使用loader类。

删除先前添加的SWF并添加新的SWF我使用以下代码

l.unloadAndStop();

l.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, loadProgress);

l.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadHandler);

l.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loadError);

var Request:URLRequest =  new URLRequest(xmlData.Page[Current_Page_No].URL[0]);

l = new Loader();

l.load(Request);

l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,     loadProgress,false,0,true);

l.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler,false,0,true);

l.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError);

在点击下一个按钮之前,每个东西都可以正常加载,我在加载完之前的内容之前快速点击下一个时遇到问题。 加载器似乎继续加载以前的内容并将其声音添加到舞台上,即使声音不在当前的SWF中,声音似乎也不会停止。我不能简单地停止所有声音,因为我会有其他带声音的SWF。似乎没有任何东西可以用于声音流甚至unloadAndStop请帮助。

2 个答案:

答案 0 :(得分:0)

要停止所有声音,您可以在致电SoundMixer.stopAll();之前尝试load(),甚至可能在l.unloadAndStop()之前。我从来没有用它来加载swfs,但值得一试。

答案 1 :(得分:0)

问题现在已修复

这是我用来删除旧的外部加载的SWF

//stop all sounds
SoundMixer.stopAll();

System.gc();//force Grabage collection (might not work)

while (Container.numChildren > 0){ Container.removeChildAt(0); }//remove from stage

try
{

currentSWF.stop();//Stop the Loaded Movie clip copy

while (currentSWF.numChildren > 0){ currentSWF.removeChildAt(0); }//remove all children

currentSWF = null;//null its reference

}

catch(er:*)
{
trace("MC null");
}

l.unloadAndStop(true);//unload the loader

l.unload();

// remove event listeners
l.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, loadProgress);

l.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadHandler);

l.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loadError);

但主要是帮助 SoundMixer.stopAll()并在

结尾处停止

外部加载带有音频的SWF。希望这适用于其他人