1

埋め込まれた swf (サウンド ライブラリとして機能) を読み込もうとしています。それは大きなswfなので、実行時にロードし、ロードされた量をローダーバーに示したいと思います。

オンラインでいくつかの調査を行ったところmimeType="application/octet-stream"、これを行う方法として を使用することがわかりました。ただし、結果として、メイン/ラッパーの swf がロードされると同時に、埋め込まれた swf もロードされます。そのため、何らかの理由で、コードの最初の行 (この場合は LoadTest コンストラクター) に到達した時点で、埋め込まれた swf 全体が既に読み込まれています。私が見つけたほとんどの例は Flex を扱っており、(FlashDevelop で) 100% as3 プロジェクトを使用していますが、これが異なる動作をする理由はわかりません。

これが私が使用しているクラスです (実際のクラスはもっと複雑ですが、これは埋め込まれた SWF をロードする基本的な仕組みです)

package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.system.LoaderContext;

public class LoadTest extends Sprite {

    [Embed(source = "soundLib.swf", mimeType="application/octet-stream")]
    private var _soundLibSWFClass:Class;
    private var _assetLdr:Loader;

    public function LoadTest():void {
        this._assetLdr = new Loader();
        this._assetLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handleComplete);
        this._assetLdr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, this.handleProgress);
        this._assetLdr.loadBytes(new _soundLibSWFClass(), new LoaderContext(false, this._assetLdr.contentLoaderInfo.applicationDomain));

        trace("start");
    }
    public function handleComplete(event:Event):void {
        trace("complete");
    }
    public function handleProgress(event:ProgressEvent):void {
        trace("progress " + event.bytesLoaded +", "+ event.bytesTotal);
    }

}
}

出力で得られるものは次のとおりです。

progress 0, 2411787
progress 2411787, 2411787
start
complete

埋め込まれたswfとこれまでに試したことについての詳細は次のとおりです。

  • サウンド ライブラリは Flash cs5 で作成され、すべてのサウンドがライブラリに配置され、適切な識別子が付けられます。
  • 埋め込まれた swf のステージは空です。
  • 「クラスをフレームにエクスポート」オプションでは、1 と 2 の両方に疲れましたが、違いはありませんでした。
  • 他の SWF ライブラリ (たとえば、ムービー クリップを含む) をロードする際にも同じ問題がありますが、サウンド ライブラリはテストで使用するのが最も簡単なようでした。
  • これをさまざまなサーバーでテストしました
  • 各テストの前にキャッシュをクリアしました。
  • 帯域幅シミュレーションを使用して、全体の読み込みに時間がかかることを 100% 確認しました。
  • ローダーのものをすべて削除しても、メインのswfのロードにはまだ時間がかかります。これは、埋め込まれたswfが同時にロードされることを示しています。

誰かがこの問題で私を助けてくれるか、実行時に組み込みの swf をロードする別の方法があることを願っています (基本的に、すべてを一度にロードすることなく単一の swf が必要です)。

ありがとう!

4

1 に答える 1

2

埋め込みタグは、コンパイル時にデータを swf に焼き付けるために使用されます。使用したいのは、Loader オブジェクトの .load 関数で、Embed タグを完全に削除します。

this._assetLdr.load(new URLRequest("soundLib.swf"));

もちろん、soundLib.swf がコンパイル済みの swf と同じフォルダーにあることも確認する必要があります。

于 2012-12-21T14:04:02.817 に答える