1

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

谢谢!

4

1 回答 1

2

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

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

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

于 2012-12-21T14:04:02.817 回答