Доступ к свойствам через строку в AS3 - PullRequest
1 голос
/ 02 мая 2011

У меня есть механизм, который я создал некоторое время назад, который загружает объекты в контейнер на основе данных 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);

Итак, просто чтобы сделать мой вопрос более конкретным: я хочу иметь возможность получать и задавать свойства, которые можно идентифицировать с помощью строки.

Ответы [ 2 ]

10 голосов
/ 02 мая 2011

Почему бы не использовать ["string property"] запись:

var mc:MovieClip=new MovieClip()
mc["alpha"] = 0.5            // setter
var alpha:Number=mc["alpha"] // getter
1 голос
/ 02 мая 2011

Мне не совсем понятно, что именно вы ищете, но у меня есть общее представление о том, к чему вы стремитесь, и у меня есть несколько предложений для вас. Для начала взгляните на документацию для класса Object в справочнике по языку AS3. Посмотрите конкретно на методы propertyIsEnumerable() и setPropertyIsEnumerable(). Я думаю, это то, о чем ты спрашиваешь.

Если нет, возможно, вы захотите изучить поведение динамических классов, которые позволяют добавлять переменные к объекту на лету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...