如何在运行时嵌入swf和加载?

时间:2012-12-21 11:38:51

标签: actionscript-3 flash embed loader

我正在尝试加载嵌入式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而不会立即加载整个东西)。

谢谢!

1 个答案:

答案 0 :(得分:2)

Embed-tag用于在编译时将数据烘焙到swf中。你想要使用的是Loader-object上的.load -function并完全删除Embed-tag。

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

当然,您还需要确保soundLib.swf与编译的swf位于同一文件夹中。