У меня есть механизм, который я создал некоторое время назад, который загружает объекты в контейнер на основе данных 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, находя все объект узлов и использует getDefinitionByName , чтобы определить, какой объект я хочу создать на основе объекта. @ cname .
Здесь я должен вручную определить каждое свойство на основе XML следующим образом:
obj.x = xml.pos.@x;
obj.y = xml.pos.@y;
и т. Д.
Мне было интересно, есть ли встроенный методдля установки свойства на основе строки.Под этим я подразумеваю что-то вроде этого:
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>
И перебрать все дочерние элементы props чтобы установить все мои свойства на лету.
Я знаю, если я создам Объект и задаю свойства внутри него так:
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);
Итак, просто чтобы сделать мой вопрос более конкретным: я хочу иметь возможность получать и задавать свойства, которые можно идентифицировать с помощью строки.