Mar*_*rty 1 properties actionscript-3
我有一个我后来创建的引擎,它根据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>
Run Code Online (Sandbox Code Playgroud)
我有一个类环境,它有一个方法loadLevel(data:XML),我解析XML,然后该函数运行XML查找所有对象节点,并使用getDefinitionByName确定我想要基于对象创建哪个对象.@ cname.
从这里开始,我必须根据XML手动定义每个属性;
obj.x = xml.pos.@x;
obj.y = xml.pos.@y;
Run Code Online (Sandbox Code Playgroud)
等等
我想知道是否有一个内置的方法来设置基于String的属性.我的意思是这样的:
var mc:MovieClip = new MovieClip();
mc.someInbuiltFunctionThatSetsAProperty("alpha", 0.5);
Run Code Online (Sandbox Code Playgroud)
这样我可以更改我的XML更像:
<object cname="Player">
<props>
<x>200</x>
<y>221</y>
<alpha>7834</alpha>
<health>Something</health>
<power>3</power>
</props>
</object>
Run Code Online (Sandbox Code Playgroud)
并遍历道具的所有子项,即时设置我的所有属性.
我知道如果我创建一个Object并在其中设置属性,如下所示:
var obj:Object =
{
var1: "hello",
var2: "there",
name: "marty"
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用for(String in Object)循环遍历名称/值,如下所示:
var i:String;
for(i in obj)
{
trace(i + ": " + obj[i]);
}
/**
* Output:
* var1: hello
* var2: there
* name: marty
*/
Run Code Online (Sandbox Code Playgroud)
可能有类似的东西吗?
当然有一种方法,因为这是使用String标识属性的示例:
var ar:Array = [new MovieClip(), new MovieClip()];
ar.sortOn("alpha", Array.ASCENDING);
Run Code Online (Sandbox Code Playgroud)
所以只是为了让我的问题更加重要:我希望能够获得并设置我可以使用String识别的属性.
Pat*_*ick 10
为什么不使用["string property"]符号:
var mc:MovieClip=new MovieClip()
mc["alpha"] = 0.5 // setter
var alpha:Number=mc["alpha"] // getter
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |