我需要在我的项目中播放 SWF 文件。这些 SWF 文件中有背景音乐。此音乐在 Flash 中的哪些声音同步选项设置为“流”。这样做是为了如果您暂停 Flash 电影,音乐也会暂停。
现在我在加载这些 SWF 文件时遇到了问题。为此,我正在使用 SWFLoader。
当我加载它时,SWF 的音频已经开始播放,但在一段时间内没有显示电影的视觉效果。连接速度越慢,显示电影视觉效果所需的时间就越长。音频和视频是同步的,这很好,但是 Flash 电影的第一帧根本不显示。
我试图通过添加一个 eventListener 来解决这个问题,以确保电影在开始播放之前已完全加载。但是,当我这样做(下面的代码)时,音乐播放了几分之一秒,然后停止,并在电影完全加载时重新启动。
解决此问题的最佳方法是什么?我在 ProgressEvent.PROGRESS 事件监听器的正确轨道上吗?
一些代码:
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);
}