プロジェクトで SWF ファイルを再生する必要があります。これらの SWF ファイルにはバックグラウンド ミュージックが含まれています。Flash 内のこの音楽のサウンド シンク オプションが「ストリーム」に設定されています。これは、Flash ムービーを一時停止すると音楽も一時停止するようにするためです。
これらの SWF ファイルをロードしているときに問題が発生しました。このために、SWFLoader を使用しています。
ロードすると、SWF のオーディオは既に再生されていますが、ムービーのビジュアルが一定時間表示されません。接続が遅いほど、映画のビジュアルが表示されるまでに時間がかかります。オーディオとビジュアルは同期していますが、フラッシュ ムービーの最初のフレームが表示されません。
これを解決するために、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);
}