我有一个引擎,我创建了一个基于XML数据将对象加载到容器中的对象。该XML的一个非常简单的例子是这样的:在AS3中通过字符串访问属性
<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(数据:XML)我通过解析XML,那么函数通过运行XML查找所有对象节点并使用getDefinitionByName来确定基于对象要创建哪个对象。@ cname。
从这里,我必须像这样手动定义基于XML的每个属性;
obj.x = [email protected];
obj.y = [email protected];
等
我想知道是否有设置基于字符串的属性的内置方法。我的意思是像这样:
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
*/
有没有类似的东西?
肯定有办法,因为这里是一个使用字符串标识属性的示例:
var ar:Array = [new MovieClip(), new MovieClip()];
ar.sortOn("alpha", Array.ASCENDING);
所以只是为了让我的问题更多了点:我希望能够获取和设置属性,我可以识别使用字符串。
疯了。我构建了类似的东西,除了我的节点名称是类名称和属性值(例如' flos.gui.GUIControl>解析为DisplayObjectContainers的XML节点允许孩子要处理和添加的节点,并且任何节点都可以有特殊的子节点'道具'和'构造函数'。 –
Triynko
2014-01-22 08:43:45
道具节点需要一组命名属性,以便将子节点构建为类型化对象并将其分配给这些属性,如下所示:' ',这样就可以实例化和分配“props”的子节点,以便在props节点的“names”属性中指定的“名称”列表支持类型名称别名例如,我可以用“rect”代替“flash.display.Rectangle”。 –
Triynko
2014-01-22 08:47:14
它还支持构造子节点'<构造函数0 =“”3 =“”> constructor>',它构建一个数组对象,该对象将通过getDefinitionByName + Class对象传递给构造函数,以及一个辅助函数,该函数硬编码20个不同的路径用1到20个构造函数参数构造类(因为你不能只在Class对象上调用“apply”)。所有属性也被智能处理,它检查hasOwnProperty,自动解释数字并自动解析为已知属性的强类型。 –
Triynko
2014-01-22 08:50:20