Мне нужно воспроизвести SWF-файлы в моем проекте. В этих SWF-файлах есть фоновая музыка. Параметры звуковой синхронизации этой музыки во Flash установлены на «stream». Это делается так, что если вы приостановите Flash-ролик, музыка также приостановится.SWFLoader начинает воспроизведение SWF без завершения загрузки
Теперь у меня есть проблема при загрузке этих SWF-файлов. Для этого я использую SWFLoader.
Когда я загружаю его, звук SWF начинает играть уже, но визуальные эффекты фильма не отображаются в течение определенного времени. Чем медленнее ваше соединение, тем больше времени требуется до того, как будут показаны видеоролики. Аудио и визуальные эффекты синхронизированы, но это хорошо, однако первые кадры флэш-ролика просто не отображаются.
Я попытался решить эту проблему, добавив eventListener, чтобы убедиться, что фильм полностью загружен, прежде чем он начнет играть. Однако, когда я это делаю (код ниже), на долю секунды играет музыка, затем останавливается и перезапускается, когда фильм полностью загружен.
Каков наилучший способ решить эту проблему? Я нахожусь на правильном пути с помощью EventEvent.PROGRESS eventlistener?
Некоторый код:
private function loadSWF():void
{
swfLoader.source = source;
swfLoader.addEventListener(ProgressEvent.PROGRESS, loadProgress);
swfLoader.addEventListener(Event.COMPLETE, startSWF);
swfLoader.load();
var soundTransform:SoundTransform = new SoundTransform(0);
swfLoader.soundTransform = soundTransform;
}
private function loadProgress(event:ProgressEvent):void
{
applicationModel.addToConsoleOutput("SWFPlayer.loadProgress(): " + event.bytesLoaded + " of " + event.bytesTotal + "bytes loaded");
if (MovieClip(swfLoader.content) && event.bytesLoaded < event.bytesTotal)
{
MovieClip(swfLoader.content).gotoAndStop(0);
var soundTransform:SoundTransform = new SoundTransform(0);
swfLoader.soundTransform = soundTransform;
}
}
private function startSWF(event:Event):void
{
swfLoader.removeEventListener(ProgressEvent.PROGRESS, loadProgress);
swfLoader.removeEventListener(Event.COMPLETE, startSWF);
dispatchEvent(new Event("loadComplete", true));
var soundTransform:SoundTransform = new SoundTransform(volume);
swfLoader.soundTransform = soundTransform;
cardMovieClip = MovieClip(swfLoader.content);
cardMovieClip.addEventListener(Event.ENTER_FRAME, endSWFHandler);
cardMovieClip.gotoAndPlay(0);
}
Хорошо, что, кажется, работает нормально и является хорошим решением. Спасибо за это, я буду реализовывать это в FLA, который у меня есть до сих пор. Однако большая часть содержимого SWF предоставляется несколькими поставщиками контента. Поэтому, если это возможно, я бы скорее обработал его в приложении Flex полностью, вместо того, чтобы провайдеры могли помещать это в код, как я буду, чем иметь меньше контроля над ним. Так что, если есть решение Flex, пожалуйста, помогите;) – Bocaxica
я должен изменить свой ответ с другим способом, чтобы продолжить – Patrick
Привет Патрика, я реализовал URLLoader и loadBytes(), как вы предложили выше, однако сейчас я не могу назвать любые функции внутри загруженного MovieClip, и я не могу установить высоту и ширину MovieClip. Вы знаете, могу ли я все еще это сделать и как? – Bocaxica