2010-07-03 104 views
3

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

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.

谷歌变成了一堆人有同样的问题,但没有appare nt解决方案。

import mx.core.ByteArrayAsset; ByteArrayAsset

也没有帮助。

+0

可能重复:HTTP://计算器。 com/questions/2187782/actionscript-3-read-file-at-compile-time – 2010-07-03 01:35:35

+0

@ M28不重复 - 我有源代码可以做我想做的事情,但它会导致程序因某种原因挂起。这篇文章首先提出了如何做到这一点。 – 2010-07-03 02:19:16

+0

在给出的问题中:''../../ data/map.txt''和'../../ map.txt'',哪一个是正确的? – 2010-07-03 17:50:54

回答

8

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

要么修改柔性配置说

<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

3

我会回答这个问题,我的回答另一个问题:

[Embed(source = "ExampleText.txt", mimeType = "application/octet-stream")] 
protected var AAAAAA:Class; 

var tmp:ByteArray = new AAAAAA(); 
var result:String = tmp.readMultiByte(tmp.bytesAvailable, tmp.endian); 
+0

+1。我认为你的第二个参数是错字,虽然(因为传递缓冲区的endianess,因为enconding没有多大意义!)。 – 2010-07-03 02:04:41

+0

感谢您关于如何真正提取数据的建议 - 但程序仍然挂起。 – 2010-07-03 02:13:13

+0

@Juan:在写作的时候,这是正确的,我不确定参数是否改变了。 – 2010-07-03 04:59:43