Actionscript 3.0听起来很会计

时间:2011-04-15 11:34:05

标签: actionscript-3 audio

我有一个主动播放的SoundChannel数组。 当新声音播放时,我将其SoundChannel附加到此阵列。 我必须维护这样一个数组,以便能够立即停止所有声音。

我希望在完成后从数组中删除声道,以防止我的数组无限增长。但是当我抓住e = Event.SOUND_COMPLETE时,我没有关于声道的信息。它只能将声音作为e.target。

实际上,我可以维护数组对(Sound,SoundChannel)。 但也许存在更轻量级的解决方案?

1 个答案:

答案 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);
}

如果你想要停止所有特殊声音,你只需要调用最后一个功能。