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

alexes 13.09.2010 18:04

Не срабатывает цикл.
 
Здравствуйте. Почемуто в конструкторе не срабатывает задание слушателя.
Код AS3:

for(var i:Number = 0; i < all.wines.numChildren; i++) {
    all.wines.getChildAt(i).name.addEventListener(MouseEvent.MOUSE_DOWN, open_big_wine);
    trace(all.wines.getChildAt(i).name);
}

А если пишу:
Код AS1/AS2:

all.wines.wine_1.addEventListener(MouseEvent.CLICK, open_big_wine);
all.wines.wine_2.addEventListener(MouseEvent.CLICK, open_big_wine);
all.wines.wine_3.addEventListener(MouseEvent.CLICK, open_big_wine);

Все ок. Но это решение не такое "красивое".
В чем проблема, подскажите пожалуйста.

Jewelz 13.09.2010 18:06

а зачем вы имени прописываете слушатель? :)

mikhailk 13.09.2010 18:07

Код:

all.wines.getChildAt(i).addEventListener(MouseEvent.MOUSE_DOWN, open_big_wine);
Только что-то мне не кажется, что это решение красивое. :)

UPD: опередили

alexes 13.09.2010 18:10

Спасибо. Помогло.

mikhailk Подскажите пожалуйста красивое решение новичку. Буду благодарен.

mikhailk 13.09.2010 18:42

Честно говоря, я слабо себе представляю, что именно происходит в коде.
Например, откуда взялись потомки у all.wines. Я подозреваю, что это картотека вин, она как формируется, динамически? Если динамически - разумно слушателей (на мой взгляд) приписывать по мере создания объектов. Тогда этот цикл вообще не нужен.

Кстати, мелочь конечно, но лучше бы i сделать int.

alexes 13.09.2010 19:05

mikhailk Спасибо за совет.

В моем случае это мувики со сцены прямо. Спасибо за помощь еще раз.

i.o. 13.09.2010 19:10

разумно вешать слушатель вообще только один к all.wines.
А не перебирать всех его детей и им приписывать один и тот же слушатель. Потом же еще отписываться придется. Вот гемора то себе создаете.
Нерационально называется.

mikhailk 13.09.2010 19:22

ну, где вешать и что слушать - кому как удобнее

Я бы в общем виде делал так:
1. Завел бы класс Bottle, который знает все о бутылке
2. Слушатель на мышь вешал бы внутри этого класса и там же от него при необходимости отписывался (если предполагается, что объекты этого класса убираются со сцены)
3. Внутри самого класса Bottle при срабатывании слушателя мыша диспатчил бы наверх событие Bottle.SELECTED, в котором передавал бы всю информацию о бутылке, которую необходимо показывать, это событие бы отлавливал уже на уровне контейнера бутылок, напр. BottleContainer.

i.o. 13.09.2010 19:29

Цитата:

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

mikhailk 13.09.2010 19:42

Не знаю, мне мой вариант больше нравится

Если отлавливать в контейнере бутылок просто клики мыша по бутылкам, все, что будет - это имя таргетной бутылки, которое еще надо обработать и достать данные по бутылке. Тут на форуме полно вопросов "как мне передать параметр в слушатель?" - это следствие как раз этого подхода.

В моем варианте - по клику мыша по бутылке в контейнер приходит сразу событие с данными. Тихо и красиво.


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

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