Как заставить Flex SWFLoader unloadAndStop также выгружать звук?
public var swfLoader:SWFLoader = new SWFLoader();
[Embed(source="/some/file1.swf")]
public var file1:Class;
[Embed(source="/some/file2.swf")]
public var file2:Class;
тогда я делаю:
swfLoader.load(file1);
Позже:
swfLoader.unloadAndStop(true);
который выгружает видео, но не звук! Поэтому я добавляю в
SoundMixer.stopAll();
Что нормально, какое-то время. Позже я делаю:
swfLoader.load(file2);
И в конце концов, во время просмотра файла file2, файл file1 начнет воспроизводиться в фоновом режиме поверх звука file2, без возможности остановить его! Как правильно остановить звук из file1? Я продолжаю видеть, как использовать unloadAndStop(), который я использую. Разве мне каждый раз приходится создавать новый объект swfLoader?
В соответствии с ответом Конрада, приведенным ниже, я должен прекратить воспроизведение звука в событиях очистки, таких как REMOVED_FROM_STAGE, однако, как я могу прекратить воспроизведение звука в SWF-файле, загруженном с помощью SWFLoader? Я не вижу очевидного способа сделать это.
2 ответа
Решения немного сложнее, потому что проблема с загруженным контентом.
Сборщик мусора не удалит звук, потому что он все еще воспроизводится (так на него ссылается Flash Player), но у вас нет доступа к его звуковому каналу (потому что он скрыт, как частные переменные в классах). Такое поведение абсолютно правильно.
Решение: в загруженном SWF-коде вы должны прекратить проигрывать этот звук (в REMOVED_FROM_STAGE или другом обработчике события 'cleanup'). Другие решения (например, SoundMixer.stopAll) будут работать в некоторых случаях, но не во всех.
Мы часто забываем убирать за нашими приложениями. Это не проблема, если они существуют так же, как экземпляр Flash Player (удаление его очистит всю память, используемую нашим SWF). Проблемы начинаются, когда мы загружаем и выгружаем SWF-файлы. Игнорирование очистки - это быстрый способ утечки памяти.
swfLoader.unloadAndStop(истина);
Удаляет ли swf и звук также. У меня отлично работает. Даже документация гласит: выгружает изображение или файл SWF. После того, как этот метод возвратит, свойство источника будет нулевым. Это поддерживается только в том случае, если на хосте установлен Flash Player версии 10 или выше. Если Flash Player ниже хоста версии 10, этот метод будет выгружать содержимое так же, как если бы для source было задано значение null. Этот метод пытается выгрузить SWF-файлы, удалив ссылки на объекты EventDispatcher, NetConnection, Timer, Sound или Video дочернего SWF-файла. В результате происходит следующее для дочернего SWF-файла и списка отображения дочернего SWF-файла: Звуки останавливаются. Слушатели событий этапа удалены. Слушатели событий для enterFrame, frameConstructed, exitFrame, активировать и деактивировать удаляются. Таймеры остановлены. Экземпляры камеры и микрофона отсоединены. Видеоклипы останавливаются.