我有一个我后来创建的引擎,它根据XML数据将对象加载到容器中。一个非常简单的XML示例如下:
<level>
<object cname="enemies.Robot">
<pos x="200" y="400" layer="mobiles" />
</object>
<object cname="Player">
<pos x="12" y="89" layer="mobiles" />
</object>
</level>
我有一个类环境,它有一个方法 loadLevel(data:XML)我解析XML,然后该函数通过XML查找所有 object 节点并使用 getDefinitionByName 根据对象确定要创建的对象。@ cname 。
从这里开始,我必须根据XML手动定义每个属性;
obj.x = xml.pos.@x;
obj.y = xml.pos.@y;
等
我想知道是否有基于String设置属性的内置方法。我的意思是这样的:
var mc:MovieClip = new MovieClip();
mc.someInbuiltFunctionThatSetsAProperty("alpha", 0.5);
这样我可以将我的XML更改为更像:
<object cname="Player">
<props>
<x>200</x>
<y>221</y>
<alpha>7834</alpha>
<health>Something</health>
<power>3</power>
</props>
</object>
遍历道具的所有孩子,即时设置我的所有属性。
我知道如果我创建一个对象并在其中设置属性:
var obj:Object =
{
var1: "hello",
var2: "there",
name: "marty"
};
然后您可以使用for(String in Object)
循环遍历名称/值,如下所示:
var i:String;
for(i in obj)
{
trace(i + ": " + obj[i]);
}
/**
* Output:
* var1: hello
* var2: there
* name: marty
*/
是否有可能与此类似的东西?
当然有一种方法,因为这是使用String识别属性的一个例子:
var ar:Array = [new MovieClip(), new MovieClip()];
ar.sortOn("alpha", Array.ASCENDING);
所以只是为了让我的问题更加重要:我希望能够获得并设置我可以使用String识别的属性。
答案 0 :(得分:10)
为什么不使用["string property"]
表示法:
var mc:MovieClip=new MovieClip()
mc["alpha"] = 0.5 // setter
var alpha:Number=mc["alpha"] // getter
答案 1 :(得分:1)
我不太清楚你正在寻找的是什么,但我对你所得到的内容有一般意识,并为你提出一些建议。首先,查看AS3语言参考中Object类的文档。请特别注意propertyIsEnumerable()
和setPropertyIsEnumerable()
方法。我想这就是你要问的问题。
如果没有,您可能需要查看动态类的行为,这样您就可以动态地向对象添加变量。