Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Динамическое создание клипа внутри клипа (http://www.flasher.ru/forum/showthread.php?t=178368)

Сeргей 20.04.2012 00:03

Динамическое создание клипа внутри клипа
 
Вот такой вопрос.
Есть некий клип, копии которого создаются следующим образом (упрощенный пример):

Код AS3:

for (var i = 0; i <= 10; i++) {
var mc:Reps = new Reps();
addChild(mc);
mc.x = i+10;
}

Допустим, перед циклом есть некий другой клип, в который я хочу поместить все дубликаты.
Я пишу:

Код AS3:

некий клип.addChild(mc)

Это правильно?

Как далее обращаться к этому дочернему клипу внутри цикла? некий клип[mc] правильно или нет?
А если я хочу к этому дочернему клипа привязать слушатель, как мне к нему обращаться? Внутри функции слушателя, если ничего не путаю, то через target.

Заранее thanks!

Wolsh 20.04.2012 00:12

1) mc это переменная ("var mc:Reps"), которая хранит ссылку на клип, пока не будет пересоздана в следующей итерации цикла. Так и надо обращаться. Неважно, в каком контейнере окажется клип. Переменная все-равно хранит на него ссылку. И уж конечно, у контейнера не появится откуда ни возьмись свойство с именем "mc".
2) если точнее, то currentTarget.

Сeргей 20.04.2012 00:23

Так а как в цикле клип создать внутри уже существующего клипа-переменной?
Пробовал 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
}


Wolsh 20.04.2012 12:22

Хранить ссылки на клипы в массиве, например
Код AS3:

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.

Сeргей 20.04.2012 23:26

Большое спасибо!
Раскрыли глаза на очевидную и очень нужную вещь.


Часовой пояс GMT +4, время: 00:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.