![]() |
Диспач клика мышки
Проблема такая:
Есть сцена с пустой группой внутри. По клику на сцене происходит событие, которое загружает в группу набор строк (Label), каждому лейблу задается слушатель клика мышки. Как мне сделать так, чтобы программно повторить первый клик (по которому пошла загрузка) и если он попал в один из лейблов инициировать слушателя этого объекта? Сначала, я попробовал запомнить сам эвент, который случился при первом клике, но если делать dispatch этого события на stage или на группе, лежащие внутри лэйблы не откликаются. Второй вариант: вытащить координаты первого клика, пробежать по всем родившимся лейблам насчет hitTestPoint и вызвать событие непосредственно на нужном элементе. Но мне кажется первый вариант интересней, просто я неправильно им пользуюсь. К тому же, при программном создании label, я не могу понять, в какой момент он получает реальные размеры width/height. Сразу после добавления в группу ширина по-прежнему 0, но в какой-то волшебный момент получает реальные значения. Из-за этого не получается сделать hitTestPoint. |
Вам это зачем? Мне кажется, что у вас просто не верно выбрано решение проблемы. Если у вас флекс, то прочитайте раздел справки "understanding flex components", или как-то так, не помню точное название, там рассказывают про то, когда компоненты добавляются на экран, когда им выставляются размеры, когда применяются изменения и прочее.
UPD: вот: http://www.developmentarc.com/site/w...cycle_v1.0.pdf |
по-моему можно так -
при клике на лейбл, вызываете метод, который вызывался при клике на стейдж. реальная высота и ширина появляются после события INIT, соответственно на него надо просто подписаться. |
Цитата:
С инитом попробую. Я зря наверно так подробно описал. Вот краткий вариант: есть сцена, в ней n компонент (не важно чего, пусть спрайтов). Все спрайты слушают MouseEvent.CLICK. При человеческом клике спрайты откликаются. Нужно программно повторить это событие, чтобы спрайт откликнулся вновь. Спрайт запомнить нельзя. В принципе, мне не сложно пробежать по всем элементам и сверить попали ли координаты, но элементов может быть несколько тысяч, при реальном клике флэш совершает такой же обход или у него какие-то более оптимизированные алгоритмы? |
getObjectsUnderPoint
|
Цитата:
|
нельзя
|
Нельзя, ибо это будет нарушение политики безопасности. Некоторые операции выполняются только по реальному клику.
|
Цитата:
Либо создайте метод, который будет по e.target определять на что нажали и соответственно предпринимать действие, либо разбейте события, например - стейдж реагирует на MOUSE_UP, а спрайты на CLICK, и создайте методы, которые в случае необходимости вызывайте из кода. |
Cпасибо, все понятно.
Цитата:
|
| Часовой пояс GMT +4, время: 22:38. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.