我正在尝试加载嵌入式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的更多信息以及我到目前为止所尝试的内容:
希望任何人都可以帮我解决这个问题,或者有另一种方法在运行时加载嵌入式swf(基本上我需要一个swf而不会立即加载整个东西)。
谢谢!
答案 0 :(得分:2)
Embed-tag用于在编译时将数据烘焙到swf中。你想要使用的是Loader-object上的.load -function并完全删除Embed-tag。
this._assetLdr.load(new URLRequest("soundLib.swf"));
当然,您还需要确保soundLib.swf与编译的swf位于同一文件夹中。