通过AS3中的String访问属性

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)

  • *历史上最大的面孔*.纯天才. (3认同)