我需要在我的项目中播放SWF文件。这些SWF文件中有背景音乐。此音乐在Flash中的声音同步选项设置为"stream“。这样做的目的是,如果您暂停Flash电影,音乐也会暂停。
现在我有一个问题,当我加载这些SWF文件。为此,我使用了一个SWFLoader。
当我加载它时,SWF的音频已经开始播放,但在一段时间内没有显示电影的视觉效果。连接速度越慢,影片的视觉效果显示的时间就越长。音频和视频是同步的,这很好,然而,flash电影的第一帧根本不显示。
我试图通过添加一个eventListener来解决这个问题,以确保电影在开始播放之前已经完全加载。然而,当我这样做时(下面的代码),音乐会播放一小段时间,然后停止,并在电影完全加载时重新启动。
解决这个问题的最佳方法是什么?我的ProgressEvent.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);
}发布于 2009-12-17 22:02:07
SWF文件被流式传输,因此它们可以开始播放,而不必加载整个文件。
1)您可以在加载的源文件中的第一帧添加stop()以避免播放,然后在加载完成后在主加载器中添加对加载到要从其开始影片的帧的影片的gotoAndPlay调用。
2)您可以尝试将负载委托给URLLoader,然后在第一个任务完成时使用Loader.loadBytes。
这是纯AS3,但您可以在使用SWFLoader的FLEX Framework中进行调整:
// child who hold the stuff to be loaded
var holder:MovieClip=new MovieClip();
addChild(holder);
// the loader used to load byte within the holder
var holderLdr:Loader=new Loader();
holder.addChild(holderLdr);
function load(url:String):void {
var ldr:URLLoader=new URLLoader();
ldr.dataFormat=URLLoaderDataFormat.BINARY;
ldr.addEventListener(Event.COMPLETE, onComplete);
ldr.load(new URLRequest(url));
}
function onComplete(e:Event):void {
var ldr:URLLoader=URLLoader(e.target);
ldr.removeEventListener(e.type, onComplete);
if (holderLdr.hasOwnProperty("unloadAndStop")){
holderLdr["unloadAndStop"]();
} else {
holderLdr.unload();
}
holderLdr.loadBytes(ldr.data);
ldr.data=null;
}
load("mySWF.swf");https://stackoverflow.com/questions/1921904
复制相似问题