3

外部の SWF ビデオ プレーヤーをロードするある種のプレイリスト (その外部ファイルへのコード アクセスはありません) があるため、ユーザーはビデオを見たり、別のビデオにスキップしたりできます。ユーザーが別のビデオに切り替えると、新しい SWF ファイルがロードされます。

問題: ユーザーがビデオの視聴を終了せずに次のビデオにスキップした場合、以前の SWF ファイル ( unloadAndStop()) をアンロードして、新しいファイルをロードします。また、前の SWF が再生されていたため、実際にはアンロードされず、まだバックグラウンドで再生されています (現在と前の 2 つのオーディオ トラックが聞こえます)。

通話を試みSoundMixer.stopAll()ましたが、バックグラウンドの読み込みと再生開始時の現在のビデオのサウンドのため、実際には役に立ちません。

メインの「ローダー」アプリケーションからこれを解決する方法はありますか?

4

2 に答える 2

0

新しいサウンドを再生する前に、すべてのサウンドを停止してみてください。stopAll()呼び出しを確認してください。

于 2012-10-20T03:25:16.510 に答える
0

興味深いことに、 unloadAndStop() はあなたの正確な状況を対象としていました。ドキュメントによると...

例: 音楽トラックを含む SWF ファイルがアプリケーションに読み込まれます。
その後、SWF は Loader.unload() を使用してアンロードされます。
SWF は画面から削除されますが、音楽は引き続き聞こえます。

解決
Loader.unloadAndStop は、Action Script 3 の API に新たに追加されたものです。
開発者がロードされたコンテンツを正しく停止してアンロードするのに役立ちます
Loader.load/loadBytes API を使用します。

...Flash Player は再帰的に停止とクリアを試みます。
可能な限りオブジェクト (Sound、NetStreams、EventListeners など)
ロードされた SWF 内。この機能は特に便利です
不明なサードパーティのコンテンツをアンロードするとき。

これはまさにあなたの状況に合っているようです!Loader の実装が正しい場合、これは unloadAndStop() メソッドのバグのように思えます。

別の解決策の 1 つは、各動画に同じローダーを使用するのではなく、ローダーの新しいインスタンスを作成することです。

プライベート var currentMovie:DisplayObject;

プライベート関数 loadSWF(url:String ):void
{   
   if( currentMovie != null )
    {
       //現在のムービーで再生中のサウンドを停止します
       //その後、表示リストから削除します
       removeChild( currentMovie );
       currentMovie = null;
    }

   var loader:Loader = new Loader();
   //configureListeners
   request.url = URL;
   loader.load( リクエスト , コンテキスト );

}

プライベート関数 onLoadComplete(event:Event):void
{
   currentMovie = event.target.loader.content;
   //等...
}
于 2010-10-14T06:32:06.313 に答える