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

时间:2011-03-23 22:21:49

标签: xml flash actionscript-3 swc

我有一个包含8个精灵的SWC,每个精灵都有一个带有Icon01,Icon02等模式的链接标识符。我可以通过执行某种形式来创建其中一个精灵的实例

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

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

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

我希望能够解析XML并将相应的精灵附加到舞台上。怎么办呢?

我的XML数据被解析为一个对象数组,而XML元素存在于

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

但我无法弄清楚如何将它作为精灵投射并将其添加到舞台上。我试着做了

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

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

3 个答案:

答案 0 :(得分:1)

如果资产已准备好/已加载,请查看flash.utils.getDefinitionByName()或loaderInfo。applicationDomain.getDefinition()

e.g。

import flash.utils.getDefinitionByName;

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

HTH

答案 1 :(得分:1)

getDefinitionByName(msgObj.image)将是可行的方法,但你需要引用你可能在某处调用的每个类,否则它将不会被编译。

我在这种情况下所做的是创建一个永远不会被调用的虚函数,并列出那里的所有类,这就是强制编译器包含它的方式。

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

答案 2 :(得分:1)

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

看来,使用第一个选项,当直接调用类new BackgroundImage();时,类被引用,因此它被包含在内。当使用var backgroundImage:Class = getDefinitionByName("BackgroundImage") as Class;调用类时,它不会直接引用,因此不会包含它。

通过选择第二个选项,可以包含.swc中的所有类,然后getDefinitionByName()就可以了。