我需要在我的項目中播放SWF文件。這些SWF文件中有背景音樂。 Flash中該音樂的聲音同步選項設置爲「流」。這樣做是爲了如果您暫停Flash電影,音樂也會暫停。SWFLoader開始播放SWF而沒有加載完成
現在我在加載這些SWF文件時遇到問題。爲此,我使用SWFLoader。
當我加載它時,SWF的音頻已經開始播放,但是在一定時間內沒有顯示電影的視頻。連接速度越慢,顯示電影視覺效果所用的時間越長。 音頻和視覺效果是同步的,這很好,但是,閃光電影的第一幀沒有被顯示。
我試圖通過添加一個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);
}
好吧,這似乎工作確定,是一個很好的解決方法。 謝謝,我將在目前爲止的FLA中實現該功能。 但是,大多數SWF內容都是由多個不同的內容提供商提供的。因此,如果可能的話,我寧願完全在Flex應用程序中處理它,而不是讓提供者把它放在代碼中,因爲我會對它有更少的控制。 所以,如果有一個Flex解決方案,請大家幫忙;) – Bocaxica
我修改我的答案用另一種方式來進行 – Patrick
嗨帕特里克, 我已經實現了URLLoader和loadBytes()如你上面所建議的,但現在我不能打電話已加載的MovieClip內的任何函數,也無法設置MovieClip的高度和寬度。你知道我是否仍然可以那樣做? – Bocaxica