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

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

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

Регистрация: May 2012
Сообщений: 38
По умолчанию Event у перекрываюшихся DisplayObject

Привет всем. Стала задача сделать "прослушку" MouseClick 2-х (в общем случае N) частично перекрывающихся наследников DisplayObject, чтобы при клике в области перекрытия Event словил не только верхний, но и все кто под ним.
Сейчас сделал так: прослушку повесил на общий контейнер, потом через getObjectsUnderPoint() получаю список всех DisplayObject под точкой клика, и уже проходя по массиву возвращенных объектов вызываю желаемый метод.

Можно ли как-то обойтись прослушкой в самих DisplayObject, чтобы оно "прошило" всех до самого нижнего?

Старый 05.11.2012, 22:00
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 2  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Отношение дети-родители имеются у объектов между собой?

Старый 05.11.2012, 22:19
AleXXX вне форума Посмотреть профиль Отправить личное сообщение для AleXXX Найти все сообщения от AleXXX
  № 3  
Ответить с цитированием
AleXXX

Регистрация: May 2012
Сообщений: 38
нет, иначе бы вопрос не стоял, событие легко бы прошло ко всей детворе. Объекты соседи, просто частично накладываются друг на друга

Старый 05.11.2012, 23:47
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 4  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
ну тогда, очевидно, нет. Клик всегда чей-то(1 объекта), потом всплывает.

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

Старый 06.11.2012, 20:17
AleXXX вне форума Посмотреть профиль Отправить личное сообщение для AleXXX Найти все сообщения от AleXXX
  № 5  
Ответить с цитированием
AleXXX

Регистрация: May 2012
Сообщений: 38
В общем реализовал так:
Код AS3:
SomeObject.addEventListener(MouseEvent.CLICK,this.onClick,false);
......
private function onClick(e:MouseEvent):void   //Обработчик клика
{
    ......
    var pool:Array = this.getUpperOfLowerUnit(e.stageX,e.stageY);
    ......
 
}
 
private function getUpperOfLowerUnit(x:int,y):Array
{
        var gp:Point = new Point(x,y)
        var TmpPool:Array = this.parent.getObjectsUnderPoint(gp);   //Тут получается  список Shape'ов
        var Pool:Array = new Array();
 
	for(var i:int=0;i<TmpPool.length;i++){
 
		var c:DisplayObject =TmpPool[i] as DisplayObject;  
 
                while(c.parent!=c.root ){   //тут пробираемся от Shape'а по списку отображения вверх 
		   if(c is Нужный тип){      // пока не встретим нужный тип наследника DisplayObject
		       break;
		   }
		  c=c.parent;
	        }
		if(c is  Нужный тип && c!=this){
 
			if(Pool.indexOf(u)<0) {   //если объект не  добавлен
 
				Pool.push(u);  //добавляем
			}						
		}			
        }
        return Pool
}

Старый 06.11.2012, 23:41
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Если до root проверяете, то может быть есть смысл именно на него повесить единственный слушатель MouseEvent?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: May 2012
Сообщений: 38
Цитата:
Если до root проверяете, то может быть есть смысл именно на него повесить единственный слушатель MouseEvent?
Теоретически можно, но рута есть свои "слушатели", чувствую с, так сказать, "маршрутизацией" евента потом запутаюсь

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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