【发布时间】:2012-12-08 23:53:01
【问题描述】:
我正在尝试加载嵌入式 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 而不是一次加载整个东西)。
谢谢!
【问题讨论】:
-
感谢先生告诉我如何设置嵌入式 SWF 的 LoaderContext :D
标签: actionscript-3 flash embed loader