Форум 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=150178)

FlashWizard 07.02.2011 18:32

Куда девается настоящее имя мувиклипа при попытке прочтения его в обработчике
 
На мувиклип, который уже на таймлайне с заданным именем ("mc1") вешаю листенер:
Код AS3:

mc1.addEventListener(MouseEvent.CLICK, click);

Потом хочу получить его имя в обработчике:
Код AS3:

private function click(e:MouseEvent) {
    trace(e.target.name); //выводит instance+рандомное число
}

Почему не выводит настоящее имя? Что интересно в обработчике ROLL_OVER - выдаёт нормальное имя - "mc1"
А в CLICK - instance + рандомное число. У меня много таких мувиков на сцене mc1, mc2, mc3, mc4 и на всех их я вешаю листенер и в качестве обработчика одну функцию - click. Чтобы как-то определять какая кнопка была нажата внутри этой функции я хотел switch-ом проверять e.target.name. Но настоящее имя куда-то девается. В чём может быть проблема?

КорДум 07.02.2011 18:33

Это не имя, а название переменной, что ссылается на клип.
Если очень хочется (что не есть логично), то можно вычленить из "mc1" цифру и воткнуть ее в то же свойство name, к примеру. Или целиком поместить туда имя.

FlashWizard 07.02.2011 18:37

Блин а почему он обрабатывает имя переменной, а не имя того на что она ссылается?

Добавлено через 1 минуту
Ну как мне быть в такой ситуации? Не для каждого же мувика писать свой обработчик ?

КорДум 07.02.2011 18:39

Не скажу - не знаю.

Bgg 07.02.2011 18:44

FlashWizard, а вешаете слушатели вы наверно следующим образом:
Код AS3:

mc1.addEventListener(MouseEvent.CLICK, click);
mc2.addEventListener(MouseEvent.CLICK, click);
mc3.addEventListener(MouseEvent.CLICK, click);
//сто тыщ строк кода
mc3651612.addEventListener(MouseEvent.CLICK, click);

Да?

В массив все складыйте, а в обработчике ищите в этом массиве e.currentTarget

FlashWizard 07.02.2011 18:45

Такая в роде на первый взгляд лёгкая задача, а не получается обработать несколько мувиков одной функцией.

КорДум 07.02.2011 18:50

Код AS3:

for (var i:int = 1; i < 100500; i++) {
    var clip:MovieClip = getChildByName("mc" + i) as MovieClip;
    vectorClips.push(clip);
    clip.addEventListener(MouseEvent.CLICK, click);
}

Хотя по-хорошему надо надо вешать на контейнер один обработчик.

FlashWizard 07.02.2011 18:51

Цитата:

e.currentTarget
Во точно )) Спасибо. Это помогло. Через e.currentTarget.name получилось.

Цитата:

FlashWizard, а вешаете слушатели вы наверно следующим образом:
Да нет конечно, все мувики сначала в массив загнал, потом циклом листенеры повесил.

Ну в общем спасибо, Bgg.

Gaen 08.02.2011 13:10

FlashWizard, скорее всего событие приходит не от самого мувика, а всплывает из его вложенного элемента, и instance name соответственно приходит его же. Это подтверждается тем, что при обращении к currentTarget вы получаете искомое имя.


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

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