![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Как заставить реагировать на событие (клик мышки) родителя и его потомка?
К примеру такой код var parent:ParentObject = new ParentObject(); var child:ChildObject = new ChildObject(); parent.mouseChildren = false; //это нужно, ибо в паренте ещё есть текстовое поле child.addEventListener(MouseEvent.CLICK, child_click); parent.addEventListener(MouseEvent.CLICK, parent_click); parent.addChild(child); function child_click(){ trace("это потомок"); } function parent_click(){ trace("это родитель"); } |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 21
|
Потому, что
и не работает. Если нужно заблокировать текстовое поле в родителе, то стоит ему поставить mouseEnabled=false ;
__________________
Пытаюсь делать игры для детей |
|
|||||
|
Строчкой
вы отменили реакцию на мышь не только у текстового поля, но и у child, он же тоже ребенок parent'а. Задайте текстовому полю отдельно mouseEnabled = false;. Странно, что у вас работает функция parent_click. Мне всегда казалось, что описание слушателя выглядит подобным образом: P.S. Возможно я заблуждаюсь. Последний раз редактировалось bav; 07.04.2011 в 13:29. |
|
|||||
|
Убрал parent.mouseChildren = false;
Теперь, если по потомку, то попадаю в обе функции сразу одновременно. А надо то либо туда, либо сюда. Последний раз редактировалось spartakd; 07.04.2011 в 13:42. |
|
|||||
|
[+4 06.05.14]
|
Вы понимаете, что повесив событие на родителя и ребенка одновременно вы их и будете вызывать одновременно, если они перекрывают друг друга ? Рассмотрим пример. Допустим родитель контейнер пустой, в него добавили ребенка - теперь область контейнера = области ребенка, тоесть вызываться будут 2 события одновременно. Распишите вашу задачу, скорее всего есть другие пути решения
|
|
|||||
|
Что значит "либо туда, либо сюда"?
|
|
|||||
|
Да.. что-то я подтормозил... сделал так
Теперь остается понять, кто это событие вызвал родитель или потомок. |
|
|||||
|
И еще, наверно, как-нибудь можно.
|
|
|||||
|
Сделал так
function click(e:Event):void{ if (e.target.parent is ParentObject) trace ("это потомок") else trace("это родитель"); } Только таки не работает это. ParentObject содержит объекты созданные не программно. Кликаю на созданный программно ChildObject - всё ок. Кликаю в любом другом месте ParentObject, то в функции e.target.parent и e.target являются объектами типа MovieClip, а не типа ParentObject. Если же использовать последний код от bav-а то всегда трейсится "ЭТО ПОТОМОК" Последний раз редактировалось spartakd; 07.04.2011 в 14:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|