PDA

Просмотр полной версии : динамическое создание переменных


pall92
13.01.2013, 01:59
Простите за возможно некорректное название темы. задача у меня банальнейшая, но я что-то впал в ступор:
мне нужно создать некоторое a-колличество экземпляров класса My_Object. и добавить их на сцену(это дети movieClip-а). естественно, я делаю это через цикл for(var i=0;i < a; i++).

Но возникает вопрос (дурацкий, я знаю) - Как дать им всем уникальные имена - "myObj" + i ?

проще говоря, как создать переменную с динамическим именем(правильно выразился?) ?

заранее огромное спасибо)

Dip52
13.01.2013, 02:14
//Определяю объект:
var myObj:MyObject;
//Определяю массив для объектов:
var objs:Array = [];
//Определяю цикл, который будет "создавать" объекты, устанавливать им имена и добавлять их в специализированный массив:
for(var iInstall:Number = 0; iInstall < 10; iInstall++)
{
//Определяю объект (создаю):
myObj = new MyObject();
//Устанаваливаю (придаю) ему имя (зависит от i):
myObj.name = String('Мой объект: '+ iInstall)
//и добавляю массив для объектов:
objs.push(myObj);
}

//Определяю цикл.
//Он будет проходить по массиву с объектами и искать объект с именем "Мой объект: 2':
for(var iSearch:Number = 0; iSearch < objs.length; iSearch++)
{
//Если есть соответствие между именем Мой объект: 2 и array[iSearch].name, то:
if('Мой объект: 2' == objs[iSearch].name)
{
trace("Оно есть. Ура!");
}
}

Оно есть. Ура!

Gaen
13.01.2013, 02:15
Давайте будем разделять теплое и мягкое: есть сам объект, который живет где-то в памяти, а есть переменная, которая на него ссылается. Переменная может называться как угодно; более того, несколько переменных с разными именами могут ссылаться на один и тот же объект.

В случае с DisplayObject'ами, в AS3 их поведение отличается от аналогичного в AS1/2, когда при создании дочернего мувиклипа надо было обязательно давать ему имя, по которому потом этот мувиклип доставался из своего родителя.

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


//массив для хранения объектов
var objects:Array = [];

//создаем пачку объектов, добавляем их в текущий контейнер и запоминаем ссылки на них в массив
for(var i:int = 0; i < a; i++){

//создаем
var obj:My_Object = new My_Object();

//добавляем
this.addChild(obj);

//запоминаем
objects.push(obj);
}

//выстраиваем объекты в рядочек
for(i = 0; i < objects.length; i++){

//достаем из массива ссылку на объект
var obj:My_Object = objects[i];

//работаем с объектом через полученную ссылку
obj.x = obj.width * i;
}

pall92
13.01.2013, 13:23
спасибо большое, ребят) я забыл что тут тоже есть .name)