是否可以动态嵌入源。而不是这样做
[Embed(source = '../../../../assets/levels/test.xml')]
我可能会做这样的事情
var src = '../../../../assets/levels/test.xml'
[Embed(source = src )]
答案 0 :(得分:2)
元数据注释中的任何内容都不可能是动态的:/。也就是说,您无法将变量放入元数据注释中。如果可能的话,会有很多很酷的可能性。所以你的第一个选择是直接嵌入xml的唯一方法。
但是,您可以编写一个自定义元数据解析器,找出如何加载(不嵌入)您的xml文件。类似的东西:
[LoadFile]
public var source:String = "../../../../assets/levels/test.xml";
我会像下面的代码那样实现(现在就写这个,还没有测试过)。然后你会通过像MyMetadataUtil.process(this)
之类的东西“处理”你的课程。有很多方法可以做到这一点。
public function extractMetadata(target:Object):void
{
var description:XML = flash.utils.describeType(target);
var tag:String = "LoadFile"
var metadata:XMLList = description.accessor.metadata.(@name == tag);
metadata += description.variable.metadata.(@name == tag);
var i:int = 0;
var n:int = metadata.length();
// usually called a 'directive'
// holds values from metadata annotation
var token:Object = {};
for (i; i < n; i++)
{
metadataXML = metadata[i];
token.property = metadataXML.parent().@name;
// token.source = myClass.source;
token.source = target[token.property];
var request:URLRequest = new URLRequest(token.source);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loader_completeHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioErrorHandler);
loader.load(request);
}
}
protected function loader_completeHandler(event:Event):void
{
event.currentTarget.removeEventListener(event.type, loader_completeHandler);
trace("SUCCESSFULLY LOADED FILE!");
}
protected function loader_ioErrorHandler(event:Event):void
{
event.currentTarget.removeEventListener(event.type, loader_ioErrorHandler);
}
那些东西会进入一些util / manager / processor类。然后在代码中的任何位置,您都可以使用:
[LoadFile]
public var source:String = "myFile.xml";
这可能是动态的。查看the Swiz Framework以获取有关如何实现自定义元数据处理器的一些示例源代码。甚至更好,Openflux's MetaUtil。一旦你设置了一次,你可以在代码中做一些硬核。使编码变得有趣而快速。
希望有所帮助, 兰斯
答案 1 :(得分:0)
您的用例基本上就是为什么我创建了向Flex SWF添加额外帧的能力,这些SWF被视为延迟加载的模块。而不是嵌入您的级别,而是在主应用程序之后将其流式传输。
-frame上的文档很稀疏。抱歉!这是一些外部的东西,它链接回我写的东西和Alex Harui写的。祝你好运!
http://www.richinternet.de/blog/index.cfm?entry=FF295F89-DAD8-CCDC-960413842BC0D478