removeChild не несет ответственности за остановку любых звуков, он только удаляет displayObject из дочернего списка, удаляя его визуально.
Если вы хотите остановить звук, который вы начали, вам понадобится ссылка натот SoundChannel при вызове removeChild.Затем просто используйте SoundChannel.stop () http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundChannel.html#stop()
Мне понадобится дополнительная информация, чтобы дать более точный ответ.
Вы сказали, что один из вариантов, который вы пробовали, - это воспроизведение звука изнутривременная шкала, на кадре 40. Тогда проблема в том, что если displayObject уже был удален, он все еще воспроизводится.В этом случае, которое не является моим любимым решением, но оно должно работать, вы можете сделать это:
// on frame 40
if (this.stage != null) {
// play sound here
}
Что означает, что сцена этого displayObject существует (если он все еще находится на сцене, то есть был добавлен какребенок и еще не был удален), тогда код внутри выполняется.Если вдруг удалить, звук будет по-прежнему играть.Вам по-прежнему нужна ссылка на SoundChannel, чтобы остановить его.Если изнутри объекта вы можете использовать addEventListener(Event.REMOVED_FROM_STAGE, func)
, чтобы узнать, когда объект был удален, и выполнить код SoundChannel.stop внутри указанной функции.
- Редактировать: Действительно, правильный способ сделать это не в реальной временной шкале
Когда вы создаете объект, добавьте к нему событие:
myObjectWithSoundInside.addEventListener(Event.REMOVED_FROM_STAGE, objRemoved)
function objRemoved (event:Event):void {
// This is where you SoundChannel.stop()
}
Затем, когда вы выполните removeChild(myObjectWithSoundInside)
, звук должен прекратиться, если предположить, что внутренний код objRemoved правильный и на него хорошо ссылаются.