埋め込まれた 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 が必要です)。
ありがとう!