Просмотр полной версии : динамическое создание переменных
Простите за возможно некорректное название темы. задача у меня банальнейшая, но я что-то впал в ступор:
мне нужно создать некоторое a-колличество экземпляров класса My_Object. и добавить их на сцену(это дети movieClip-а). естественно, я делаю это через цикл for(var i=0;i < a; i++).
Но возникает вопрос (дурацкий, я знаю) - Как дать им всем уникальные имена - "myObj" + i ?
проще говоря, как создать переменную с динамическим именем(правильно выразился?) ?
заранее огромное спасибо)
//Определяю объект:
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("Оно есть. Ура!");
}
}
Оно есть. Ура!
Давайте будем разделять теплое и мягкое: есть сам объект, который живет где-то в памяти, а есть переменная, которая на него ссылается. Переменная может называться как угодно; более того, несколько переменных с разными именами могут ссылаться на один и тот же объект.
В случае с 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;
}
спасибо большое, ребят) я забыл что тут тоже есть .name)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.