вторник, января 27, 2009

Неубиваемый звук в режиме Start. AS3

На такие грабли наткнулся:

Приложение загружает один и тот же SWF в разные контейнеры, каждый из которых проигрывает загруженный клип и имеет автономное управление звуком. В таймлайне SWF стартуется звук в режиме Start.

Контейнеры добавляются (mx:AddChild) в разных стэйтах (mx:State). Соответственно, при переключении стэйтов, я отслеживаю события addedToStage/removedFromStage для остановки/запуска клипа и включения/выключения звука (компоненты при смене стэйтов удаляются из списка отображаемых объектов, а не из памяти). Если не останавливать клипы, они всё равно воспроизводятся, даже если их нет в списке отображаемых объектов, а так же и их звук, что, понятное дело, совсем не хорошо.

Так вот. При старте звука в режиме Start в одном контейнере, в другом этот звук уже не начнет воспроизводиться заново, а будет продолжать играться. Регулировка громкости так же будет влиять только на него. В остальных режимах, дело ясное, всё работает независимо.

Остановка таймлайн-звука для конкретного клипа в AS3 не предусмотрена.
Есть возможность отключить все звуки приложения при помощи SoundMixer.stopAll();. Как вариант, такой подход в принципе, приемлем, но остановить все звуки приложения - это значит исключить ситуацию, когда, к примеру, требуется остановить звук лишь одного компонента.

Комментариев нет: