Actionscript 3.0 звучит с учетом - PullRequest
       3

Actionscript 3.0 звучит с учетом

0 голосов
/ 15 апреля 2011

У меня активно работает Массив SoundChannels.Когда будет воспроизводиться новый звук, я добавляю его SoundChannel к этому массиву.Я должен поддерживать такой массив, чтобы иметь возможность остановить все звуки сразу.

Я хотел бы удалить звуковой канал из массива, когда он завершится, чтобы предотвратить бесконечное увеличение моего массива.Но когда я ловлю e = Event.SOUND_COMPLETE, у меня нет информации о звуковом канале.Получить звук можно только как e.target.

На самом деле я могу поддерживать массив пар (Sound, SoundChannel).Но может быть, существует более легкое решение?

1 Ответ

2 голосов
/ 15 апреля 2011

вам не нужен этот массив :) вы можете просто использовать SoundMixer.StopAll ();чтобы остановить каждый воспроизводимый звук.

edit: так как вы хотите остановить все специальные звуки, у меня есть новое решение.во-первых, вы создаете новый класс 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);
}

, если вы хотите остановить все специальные звуки, вы просто вызываете эту последнюю функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...