Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   массив MovieClip из библиотеки, EventListener обрабатывает только последний мувик (http://www.flasher.ru/forum/showthread.php?t=135374)

Cholito 21.01.2010 22:25

массив MovieClip из библиотеки, EventListener обрабатывает только последний мувик
 
Приветствую всех!

Бьюсь над проблемой, но уже просто не знаю, что можно сделать. А дело в следующем:
Беру мувик из библиотеки, создаю его экземпляр в цикле, добавляю его в массив и на екран следующим образом:

Код AS3:

var classBtArr:Array = new Array(10);
 
for (var k:int = 0; k<10; k++){
        var myClassBt:MovieClip = new setClass();
                myClassBt.y = 30*k;
                myClassBt.name = "setClassBt"+k;
                classBtArr.push(myClassBt);
                myClassBt.addEventListener(MouseEvent.CLICK,onSetClass);
                addChild(myClassBt); // можно написать addChild(classBtArr[k]); - результат тот же
 
                function onSetClass(e:Event): void{
                        trace(myClassBt.name)// выводит только: setClassBt9
                        if (myClassBt.currentFrame!=11){
                                myClassBt.gotoAndStop(11)// тут на 11-й кадр переходит только последний добавленный мувик, хотя нажимаю на другие
                                }else{
                                        myClassBt.gotoAndStop(1+Math.floor(myClassBt.mouseX/20));
                                        }
                        }
                }

Событие Click срабатывает при нажатии на любой из мувиков, но по отношению только к последнему из них. А нужно, чтобы понимало, какой мувик вызвал событие, а этого он ну никак делать не хочет...

Помогите, пожалуйста. Очень нужно, но не могу с этим разобраться никак, и в интернете ничего подходящего не нахожу.

Gaen 21.01.2010 22:34

Код AS3:

trace(e.target.name);


Cholito 22.01.2010 01:05

не помогло
 
Да, для команды

trace(e.target.name);

даёт результаты типа:

instance136
instance162
instance214
instance32
...

Но для

trace(e.target.y);

всё время выводит 0. Хотя мувики имеют разные координаты, выстроены в столбик. И на 11й кадр они тоже не переходят. Такой вариант не спасает ситуацию.

Gaen 22.01.2010 02:08

Переход на 11 кадр нужно тоже писать для e.target
По поводу y=0 - что у вас внутри setClass? Туда случайно не напихано еще чего-нибудь? Попробуйте ему прописать mouseChildren = false

Cholito 22.01.2010 02:23

:) уже работает!
 
А оказывается, нужно было написать

Код AS3:

trace(e.currentTarget.y);

:)

Вот и все дела.
Код работает в следующем виде:


Код AS3:

var classBtArr:Array = [];
 
 
for (var k:int = 0; k<10; k++){
                var myClassBt:MovieClip = new setClass();
                myClassBt.x = 0;
                myClassBt.y = 30*k;
                myClassBt.instanceName = "setClassBt"+k;
                myClassBt.addEventListener(MouseEvent.CLICK,onSetClass);
                classBtArr[k]=myClassBt;
                addChild(classBtArr[k]);
 
                function onSetClass(e:Event): void{
                        trace(e.currentTarget.y);
                        if (e.currentTarget.currentFrame!=11){
                                e.currentTarget.gotoAndStop(11);
                                }else{
                                        e.currentTarget.gotoAndStop(1+Math.floor(e.currentTarget.mouseX/20));
                                        trace(e.currentTarget.currentFrame-1);
                                        }
                        }
                myClassBt.removeMovieClip;
 
        }

Обидно только, что столько времени убито на то, чтобы найти такую мелкую причину.
Поэтому, кого интересует, как бороться с добавленными из библиотеки кнопками/мувиками, пользуйтесь на здоровье этим кодом :)

Добавлено через 12 минут
GAIKER, спасибо за сотрудничество :)


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

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