![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2004
Сообщений: 90
|
Проблема такая:
Есть сцена с пустой группой внутри. По клику на сцене происходит событие, которое загружает в группу набор строк (Label), каждому лейблу задается слушатель клика мышки. Как мне сделать так, чтобы программно повторить первый клик (по которому пошла загрузка) и если он попал в один из лейблов инициировать слушателя этого объекта? Сначала, я попробовал запомнить сам эвент, который случился при первом клике, но если делать dispatch этого события на stage или на группе, лежащие внутри лэйблы не откликаются. Второй вариант: вытащить координаты первого клика, пробежать по всем родившимся лейблам насчет hitTestPoint и вызвать событие непосредственно на нужном элементе. Но мне кажется первый вариант интересней, просто я неправильно им пользуюсь. К тому же, при программном создании label, я не могу понять, в какой момент он получает реальные размеры width/height. Сразу после добавления в группу ширина по-прежнему 0, но в какой-то волшебный момент получает реальные значения. Из-за этого не получается сделать hitTestPoint. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Вам это зачем? Мне кажется, что у вас просто не верно выбрано решение проблемы. Если у вас флекс, то прочитайте раздел справки "understanding flex components", или как-то так, не помню точное название, там рассказывают про то, когда компоненты добавляются на экран, когда им выставляются размеры, когда применяются изменения и прочее.
UPD: вот: http://www.developmentarc.com/site/w...cycle_v1.0.pdf
__________________
#flasher@irc.trg.ru:6667 Последний раз редактировалось Obi; 20.10.2010 в 11:12. |
|
|||||
|
Регистрация: Feb 2007
Сообщений: 563
|
по-моему можно так -
при клике на лейбл, вызываете метод, который вызывался при клике на стейдж. реальная высота и ширина появляются после события INIT, соответственно на него надо просто подписаться. |
|
|||||
|
Регистрация: Sep 2004
Сообщений: 90
|
Цитата:
С инитом попробую. Я зря наверно так подробно описал. Вот краткий вариант: есть сцена, в ней n компонент (не важно чего, пусть спрайтов). Все спрайты слушают MouseEvent.CLICK. При человеческом клике спрайты откликаются. Нужно программно повторить это событие, чтобы спрайт откликнулся вновь. Спрайт запомнить нельзя. В принципе, мне не сложно пробежать по всем элементам и сверить попали ли координаты, но элементов может быть несколько тысяч, при реальном клике флэш совершает такой же обход или у него какие-то более оптимизированные алгоритмы? |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
getObjectsUnderPoint
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
Регистрация: Sep 2004
Сообщений: 90
|
Сейчас уже не важно, просто интересно, можно ли программно повторить событие. dispatch вызывается на конкретном элементе, а реальное событие затрагивает все элементы сцены.
Последний раз редактировалось Vier; 20.10.2010 в 12:38. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
нельзя
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
Регистрация: Feb 2007
Сообщений: 563
|
Цитата:
Либо создайте метод, который будет по e.target определять на что нажали и соответственно предпринимать действие, либо разбейте события, например - стейдж реагирует на MOUSE_UP, а спрайты на CLICK, и создайте методы, которые в случае необходимости вызывайте из кода. |
|
|||||
|
Регистрация: Sep 2004
Сообщений: 90
|
Cпасибо, все понятно.
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|