Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.04.2011, 13:19
spartakd вне форума Посмотреть профиль Отправить личное сообщение для spartakd Найти все сообщения от spartakd
  № 1  
Ответить с цитированием
spartakd

Регистрация: Mar 2002
Адрес: Москва
Сообщений: 12
Отправить сообщение для spartakd с помощью ICQ
По умолчанию addEventListener для потомков и родителей

Как заставить реагировать на событие (клик мышки) родителя и его потомка?

К примеру такой код

Код AS3:
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("это родитель");
}
всегда выходит только "это родитель"

Старый 07.04.2011, 13:24
dodoaav вне форума Посмотреть профиль Отправить личное сообщение для dodoaav Найти все сообщения от dodoaav
  № 2  
Ответить с цитированием
dodoaav

Регистрация: Mar 2011
Сообщений: 21
Потому, что
Код AS3:
parent.mouseChildren = false;
и не работает.
Если нужно заблокировать текстовое поле в родителе, то стоит ему поставить mouseEnabled=false ;
__________________
Пытаюсь делать игры для детей

Старый 07.04.2011, 13:26
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 3  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Строчкой
Код AS3:
parent.mouseChildren = false; //это нужно, ибо в паренте ещё есть текстовое поле
вы отменили реакцию на мышь не только у текстового поля, но и у child, он же тоже ребенок parent'а. Задайте текстовому полю отдельно mouseEnabled = false;. Странно, что у вас работает функция parent_click. Мне всегда казалось, что описание слушателя выглядит подобным образом:
Код AS3:
function someHandler(event:SomeEventClass):ReturnClass { ... }
P.S. Возможно я заблуждаюсь.


Последний раз редактировалось bav; 07.04.2011 в 13:29.
Старый 07.04.2011, 13:26
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
parent.mouseChildren = false;
Вы сами отключили события мыши у детей.
__________________
тут я

Старый 07.04.2011, 13:32
spartakd вне форума Посмотреть профиль Отправить личное сообщение для spartakd Найти все сообщения от spartakd
  № 5  
Ответить с цитированием
spartakd

Регистрация: Mar 2002
Адрес: Москва
Сообщений: 12
Отправить сообщение для spartakd с помощью ICQ
Убрал parent.mouseChildren = false;
Теперь, если по потомку, то попадаю в обе функции сразу одновременно. А надо то либо туда, либо сюда.


Последний раз редактировалось spartakd; 07.04.2011 в 13:42.
Старый 07.04.2011, 13:43
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Вы понимаете, что повесив событие на родителя и ребенка одновременно вы их и будете вызывать одновременно, если они перекрывают друг друга ? Рассмотрим пример. Допустим родитель контейнер пустой, в него добавили ребенка - теперь область контейнера = области ребенка, тоесть вызываться будут 2 события одновременно. Распишите вашу задачу, скорее всего есть другие пути решения

Старый 07.04.2011, 13:43
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 7  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Что значит "либо туда, либо сюда"?
Код AS3:
var parent:ParentObject = new ParentObject();
var child:ChildObject = new ChildObject();
parent.addEventListener(MouseEvent.CLICK, parent_click);
parent.addChild(child);
 
function parent_click(){
    if (Math.random() > 0.5) trace("это родитель");
    else trace("это потомок");
}

Старый 07.04.2011, 13:59
spartakd вне форума Посмотреть профиль Отправить личное сообщение для spartakd Найти все сообщения от spartakd
  № 8  
Ответить с цитированием
spartakd

Регистрация: Mar 2002
Адрес: Москва
Сообщений: 12
Отправить сообщение для spartakd с помощью ICQ
Да.. что-то я подтормозил... сделал так
Код AS3:
var parent:ParentObject = new ParentObject();
var child:ChildObject = new ChildObject();
parent.mouseChildren = false; //это нужно, ибо в паренте ещё есть текстовое поле
parent.addEventListener(MouseEvent.CLICK, click);
parent.addChild(child);
 
function click(e:Event):void{
 
}
Теперь остается понять, кто это событие вызвал родитель или потомок.

Старый 07.04.2011, 14:02
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 9  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Код AS3:
function click(event:MouseEvent):void{
    if (event.eventPhase == EventPhase.AT_TARGET) trace("это родитель");
    else trace("это потомок");
}
И еще, наверно, как-нибудь можно.

Старый 07.04.2011, 14:05
spartakd вне форума Посмотреть профиль Отправить личное сообщение для spartakd Найти все сообщения от spartakd
  № 10  
Ответить с цитированием
spartakd

Регистрация: Mar 2002
Адрес: Москва
Сообщений: 12
Отправить сообщение для spartakd с помощью ICQ
Сделал так

Код AS3:
function click(e:Event):void{
 if (e.target.parent is ParentObject) trace ("это потомок")
 else trace("это родитель");
}
Добавлено через 29 минут
Только таки не работает это.

ParentObject содержит объекты созданные не программно.
Кликаю на созданный программно ChildObject - всё ок.
Кликаю в любом другом месте ParentObject, то в функции
e.target.parent и e.target являются объектами типа MovieClip, а не типа ParentObject.

Если же использовать последний код от bav-а то всегда трейсится "ЭТО ПОТОМОК"


Последний раз редактировалось spartakd; 07.04.2011 в 14:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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