我有一个主动播放的SoundChannel数组。 当新声音播放时,我将其SoundChannel附加到此阵列。 我必须维护这样一个数组,以便能够立即停止所有声音。
我希望在完成后从数组中删除声道,以防止我的数组无限增长。但是当我抓住e = Event.SOUND_COMPLETE时,我没有关于声道的信息。它只能将声音作为e.target。
实际上,我可以维护数组对(Sound,SoundChannel)。 但也许存在更轻量级的解决方案?
答案 0 :(得分:2)
你不需要那个数组:)你可以使用SoundMixer.StopAll();停止正在播放的每一个声音。
编辑:因为你想要停止所有特殊声音,我有一个新的解决方案。 首先,您创建一个新的actionscript类,然后将此代码添加到其中。
package
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.media.SoundChannel;
public class SpecialSoundChannel extends SoundChannel
{
var _parent:DisplayObject;
public function SpecialSoundChannel(Parent:DisplayObject)
{
super();
_parent = Parent;
_parent.addEventListener("StopSpecialSound", stopChannel);
}
public function stopChannel(e:Event):void
{
//DO SOME OTHER STUFF YOU WANT DONE.
stop();
}
}
}
每当你想要添加一个不是音乐的特殊声音时,你就是这样做的:
var _sound:SpecialSoundChannel = new SpecialSoundChannel(this);
“this”是您播放和停止声道的类,我假设它与您创建声道的位置相同,因此可以称之为“this”。您将以下函数添加到该类。
public function stopSpecialSounds():void
{
var _e:Event = new Event("StopSpecialSound");
dispatchEvent(_e);
}
如果你想要停止所有特殊声音,你只需要调用最后一个功能。