![](/img/trans.png)
[英]AS3/XML/FLASH: Finding the attribute based on the value of the element
[英]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.