我正在尝试加载嵌入式 swf(充当声音库)。由于它是一个大型 swf,我想在运行时加载它并有一个加载器栏指示加载了多少。
在网上做一些研究,我发现使用mimeType="application/octet-stream"
将是做到这一点的方法。然而,结果是嵌入的 swf 仍然在加载主/包装 swf 的同时加载。因此,由于某种原因,当我到达第一行代码时(在本例中为 LoadTest 构造函数),整个嵌入式 swf 已经加载。我发现的大多数示例都与 Flex 打交道,并且我使用的是 100% as3 项目(在 FlashDevelop 中),但我看不出有什么不同的原因。
这是我正在使用的类(真正的类要复杂得多,但这将是加载嵌入式 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 而不是一次加载整个东西)。
谢谢!