![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: May 2012
Сообщений: 38
|
Привет всем. Стала задача сделать "прослушку" MouseClick 2-х (в общем случае N) частично перекрывающихся наследников DisplayObject, чтобы при клике в области перекрытия Event словил не только верхний, но и все кто под ним.
Сейчас сделал так: прослушку повесил на общий контейнер, потом через getObjectsUnderPoint() получаю список всех DisplayObject под точкой клика, и уже проходя по массиву возвращенных объектов вызываю желаемый метод. Можно ли как-то обойтись прослушкой в самих DisplayObject, чтобы оно "прошило" всех до самого нижнего? |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Отношение дети-родители имеются у объектов между собой?
|
|
|||||
|
Регистрация: May 2012
Сообщений: 38
|
нет, иначе бы вопрос не стоял, событие легко бы прошло ко всей детворе. Объекты соседи, просто частично накладываются друг на друга
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
ну тогда, очевидно, нет. Клик всегда чей-то(1 объекта), потом всплывает.
Ну можно немного облагородить, вроде того - повесить на стейдж слушатель, у нужных объектов реализовать интерфейс, и диспатчить клик в выбранные объекты через getObjectsUnderPoint, которые реализуют интерфейс. |
|
|||||
|
Регистрация: May 2012
Сообщений: 38
|
В общем реализовал так:
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 } |
|
|||||
|
Регистрация: May 2012
Сообщений: 38
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|