繁体   English   中英

基于XML元素的Flash AS3附加SWC符号

[英]Flash AS3 Attach SWC Symbol Based on XML Element

我有一个包含8个精灵的SWC,每个精灵都有一个模式为Icon01,Icon02等的链接标识符。我可以通过执行以下形式来创建这些精灵之一的实例

var i:Icon01 = new Icon01();
this.addChild(i);

但是,我有一个XML文件,其中包含不同的消息,并且每个消息都包含以相同方式标记的图像元素

...
<message>
    <image>Icon01</image>
</message>
...

我希望能够解析XML并将相应的sprite附加到舞台上。 如何才能做到这一点?

我的XML数据被解析为对象数组,并且XML元素位于

var msgObj:Object = this.theMessages.messages.shift();
trace(msgObj.image);

但是我不知道如何将其转换为精灵并将其添加到舞台上。 我试着做

var s:Sprite = msgObj.image as Sprite;
this.addChild(s);

我只是得到一个有关NULL对象的错误。 谢谢你的帮助。

看一下flash.utils.getDefinitionByName()或loaderInfo。 applicationDomain.getDefinition() ,如果资产已准备就绪/已加载。

例如

import flash.utils.getDefinitionByName;

var Image:Class = getDefinitionByName(msgObj.image) as Class;
this.addChild(new Image());

高温超导

getDefinitionByName(msgObj.image)将是解决方法,但是您将需要引用您可能在某个地方调用的每个类,否则它将无法编译。

在这种情况下,我要做的是创建一个永远不会被调用的伪函数,并在那里列出所有类,这样您就可以强制编译器将其包括在内。

另一种选择是使用[embed]功能而不是使用swc加载它们,这样可以确保它们已编译并且可以随时调用。

在FlashDevelop 4.0.1(不确定较旧的版本)中,右键单击.swf文件。 “添加到库”选项的正下方是“选项”。 代替“库(包含引用的类)”,选择“包含库(完全包含)”。

似乎第一个选择是,当像new BackgroundImage();一样直接调用类时new BackgroundImage(); 引用了类,因此将其包含在内。 当使用var backgroundImage:Class = getDefinitionByName("BackgroundImage") as Class;调用var backgroundImage:Class = getDefinitionByName("BackgroundImage") as Class; 它没有被直接引用,所以不包含在内。

通过选择第二个选项,.swc中的所有类都将包含在内,然后getDefinitionByName()可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM