Actionscript 3 ActionScript3.0声音会计

Actionscript 3 ActionScript3.0声音会计,actionscript-3,audio,Actionscript 3,Audio,我有一系列正在播放的声道。 当播放新声音时,我将其SoundChannel附加到此阵列。 我必须维护这样一个阵列,以便能够同时停止所有声音 我想在阵列结束时从阵列中删除声音通道,以防止阵列的有限增长。但当我捕捉到e=Event.SOUND_COMPLETE时,我没有关于声道的信息。只能将声音作为e目标 实际上,我可以维护成对数组(声音,声音通道)。 但也许还有更多的轻量级解决方案?您不需要该阵列:)您可以使用SoundMixer.StopAll();停止播放的每一个声音 编辑:既然你想停止所有特

我有一系列正在播放的声道。 当播放新声音时,我将其SoundChannel附加到此阵列。
我必须维护这样一个阵列,以便能够同时停止所有声音

我想在阵列结束时从阵列中删除声音通道,以防止阵列的有限增长。但当我捕捉到e=Event.SOUND_COMPLETE时,我没有关于声道的信息。只能将声音作为e目标

实际上,我可以维护成对数组(声音,声音通道)。
但也许还有更多的轻量级解决方案?

您不需要该阵列:)您可以使用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”是您播放和停止soundchannel的类,我假设它与您创建soundchannel的类相同,因此可以称之为“this”。将以下函数添加到该类中

public function stopSpecialSounds():void
{
    var _e:Event = new Event("StopSpecialSound");
    dispatchEvent(_e);
}

如果您想停止所有特殊声音,只需调用最后一个函数。

谢谢您的回答。但我不想停止每一个声音。我只需要停止阵列中的声音。例如,可能会播放一些音乐。当我停止声音时,它必须继续播放。“我必须保持这样一个阵列,以便能够一次停止所有声音。”在我看来,你希望能够一次停止所有声音,因此混音器可以在你想要的时候为你做这件事,而不必将所有的声道保持在一个阵列中。嗯,我已经更新了我的评论。换句话说,我不会停止所有的声音。我将只停止“特殊”声音,即我阵列中的所有声音。谢谢,米切尔。漂亮的解决方案!很高兴我能提供帮助:)并且您可能希望接受答案,因此此问题可以存储为已回答。