我需要能够将外部配置文件加载到我的Flex应用程序中。我已经读到,只要将mimeType设置为application / octet-stream,就可以使用嵌入来实现。

package learning {
    import org.flixel.*;
    public class PlayState extends FlxState {
        [Embed(source = "../../data/tiles.png")] private var _tiles:Class;
        [Embed(source = '../../data/map.txt', mimeType = "application/octet-stream")] private var ExternalMapData:Class;

        public var txt:FlxText;
        public var player:FlxSprite;

        override public function create():void {
            bgColor = 0xffaaaaaa;
            super.create();
        }

        override public function update():void {
            super.update();
        }
    }
}

当我使用mxmlc进行编译时,它可以成功编译且没有错误。当我运行SWF时,它将加载所有Flixel菜单,然后挂起。

如果我注释掉[Embed(source = '../../data/map.txt'行,它将编译并且不会挂起。

为什么嵌入会导致冻结?

mxmlc的版本信息:
Adobe Flex Compiler (mxmlc)
Version 4.0.0 build 14159

编辑

事实证明错误未正确显示,但这是我从尝试嵌入得到的结果:
VerifyError: Error #1014: Class mx.core::ByteArrayAsset could not be found.
Google招来了一群同样的问题,但没有明显的解决方案的人。
import mx.core.ByteArrayAsset; ByteArrayAsset
也没有帮助。

最佳答案

啊哈!事实证明,该解决方案非常简单-运行时共享库​​未静态链接到swf,并且未在运行时正确设置访问路径。解决方案很简单:

要么修改flex-config说
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
或手动将参数传递给mxmlc
mxmlc -static-link-runtime-shared-libraries=true -debug=true Main.swf -- Main.as

10-06 07:57