Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отключить (на время) MouseEvent parent-а. (http://www.flasher.ru/forum/showthread.php?t=129731)

FreshFlashEr 08.09.2009 23:27

Отключить (на время) MouseEvent parent-а.
 
Eсть sprite-parent на нём группа sprite-child-ов (работают как кнопки).
У parent-а и у child-ов свои MouseEvent-ы.
Естессно, при нажатии на child - parent тоже ловит (свой click).
Как отключить (на время нажатия child-а) MouseEvent у parent-а?

wvxvw 09.09.2009 00:33

event.stopImmediatePropagation()

etc 09.09.2009 00:41

Цитата:

Сообщение от wvxvw (Сообщение 849285)
event.stopImmediatePropagation()

Я думаю, обычного stopPropagation достаточно, не нужно так усердствовать :quiet:

wvxvw 09.09.2009 00:49

что первое попало в автокомплит :)

switcher! 09.09.2009 01:22

вопрос докучи: а не будет ли быстрее всегда писать event.stopPropagation() в том же клике мыши, чтобы исключить bubbling phase, а значит и затраты времени на прохождение по дисплейлисту.
если подразумевается, что в предках листнеров мыши не будет (я так понимаю, отмена действует только на конкретное событие/клик)
?

wvxvw 09.09.2009 01:45

Даже если и будет быстрее то:
- на сколько? (ну, сколько уровней вложености у вас будет в проекте, 10 - это уже кажется много...)
- ну даже предположим, что 10, проверить 10 раз в цикле hasEventListener() - ну тоже мне как-то представляется не особо требовательной к ресурсам операцией...
Так что даже если и быстрее - увеличение скорости будет в микросекундах, и то если... так, что думаю, оно того не стоит, но проверять, конечно, стоит всегда :)

switcher! 09.09.2009 02:17

тогда вытекающее отсюда дополнительное решение вопроса темы - это дописать в начале обработчика (листнера мыши) sprite-parent'а
Код AS3:

        if (event.eventPhase == 3)
        {
                return;
        }

Решение может и не элегантное/эффективное, но рабочее -)))

FreshFlashEr 09.09.2009 03:53

Спасиб!
Так вот это (eventPhase == 3) как раз и без проблем сработало.
А с stopPropagation пока как-то не очень...

Я так понял stopPropagation в child-event нужно?
child и parent - каждый в своём отдельном классе...
(просто на таймлайне stopPropagation работает). Что не так (уже просто - ради интереса)?

wvxvw 09.09.2009 04:10

Мануал = друг

FreshFlashEr 09.09.2009 11:55

Цитата:

Сообщение от wvxvw (Сообщение 849334)

Ну это – бесспорно! Только один абзац мне особо ничего не дал (кроме общеознакомительной информации). Более того, по этому примеру всё понял (про stopPropagation) http://www.learningactionscript3.com...t-propagation/. Да только не срабатывает в child-е всё вышеуказанное. Может кто на пальцах покажет (куда у кого вставить, чтоб заработало)?

wvxvw 09.09.2009 12:12

Ну может вы покажете тогда, как у вас не работает?

FreshFlashEr 09.09.2009 12:35

Вложений: 1
Ну вот такое:
Вложение 22913

Котяра 09.09.2009 12:40

впишите код проблемных классов сюда в тег [as3]

FreshFlashEr 09.09.2009 12:49

так?
 
Parent-class:
Код AS3:

package classa{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import classa.SpriteBtn;
 
        public class Holder extends Sprite {
 
                public function Holder() {
                    this.addEventListener(MouseEvent.CLICK, clickme, false, 0, true);
                }
                public function clickme(e:MouseEvent):void {
                    trace("Holder clicked!");
                }
        }
}

Child-class:
Код AS3:

package classa{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        public class SpriteBtn extends Sprite {
 
                public function SpriteBtn() {
                    this.addEventListener(MouseEvent.MOUSE_DOWN, mDown, false, 0, true);
                }
                public function mDown(e:MouseEvent):void {
                    trace("ChildSprite pressed!");
                    e.stopPropagation();//e.stopImmediatePropagation();
                }
        }
}


wvxvw 09.09.2009 13:03

Вы на разные ивенты подписались

FreshFlashEr 09.09.2009 13:12

и всего-то?
 
Спасибо!
Простите ньюбика, а? Ну с кем не бывает :rolleyes:


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

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