Просмотр полной версии : Динамическое создание клипа внутри клипа
Вот такой вопрос.
Есть некий клип, копии которого создаются следующим образом (упрощенный пример):
for (var i = 0; i <= 10; i++) {
var mc:Reps = new Reps();
addChild(mc);
mc.x = i+10;
}
Допустим, перед циклом есть некий другой клип, в который я хочу поместить все дубликаты.
Я пишу:
некий клип.addChild(mc)
Это правильно?
Как далее обращаться к этому дочернему клипу внутри цикла? некий клип[mc] правильно или нет?
А если я хочу к этому дочернему клипа привязать слушатель, как мне к нему обращаться? Внутри функции слушателя, если ничего не путаю, то через target.
Заранее thanks!
1) mc это переменная ("var mc:Reps"), которая хранит ссылку на клип, пока не будет пересоздана в следующей итерации цикла. Так и надо обращаться. Неважно, в каком контейнере окажется клип. Переменная все-равно хранит на него ссылку. И уж конечно, у контейнера не появится откуда ни возьмись свойство с именем "mc".
2) если точнее, то currentTarget.
Так а как в цикле клип создать внутри уже существующего клипа-переменной?
Пробовал var некий клип.mc:Reps = new Reps() и некий клип[mc]:Reps = new Reps() выскакивают ошибки Syntax error: expecting semicolon before dot для первого варианта и expecting semicolon before leftbracket для второго.
RJ Presto
20.04.2012, 11:23
если вы хотите просто перебрать все дочерние клипы - то вот так
var container:Sprite; // это контейнер, куда складывались все экземпляры Reps
for (var i = 0; i < container.numChildren; i++) {
var mc:Reps = container.getChildAt(i) as Reps;
// делаем какие-то действия с mc
}
Хранить ссылки на клипы в массиве, например
var container:Sprite = new Sprite();
addChild(container);
// создаем в цикле экземпляры Reps и заполняем массив
var repses:Array = new Array();
for(var i:uint = 0; i < 10; i++)
{
var mc:Reps = new Reps();
container.addChild(mc);
repses.push(mc);
}
// В каждый экземпляр Reps из массива добавляем новый клип класса SomeClip
var someClips:Array = new Array();
for(var i:uint = 0; i < 10; i++)
{
var somMC:SomeClip = new SomeClip();
someClips.push(somMC);
var mc:Reps = reps[i] as Reps;
mc.addChild(someMC);
}
Но это все неудобно, когда начинаются вложенности. Надо учиться писать в классах, писать свои классы объектов, у которых были бы предусмотрены собственные свойства. То есть у каждого экземпляра Reps например было бы свойство, хранящее ссылку на его собственный экземпляр SomeClip. Так, как Вы порываетесь писать – "некий_клип.mc". Это свойство "mc" надо объявлять в классе Reps, чтобы оно стало доступным свойством любого экземпляра Reps.
Большое спасибо!
Раскрыли глаза на очевидную и очень нужную вещь.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.