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

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

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

Регистрация: Sep 2004
Сообщений: 90
По умолчанию Диспач клика мышки

Проблема такая:
Есть сцена с пустой группой внутри. По клику на сцене происходит событие, которое загружает в группу набор строк (Label), каждому лейблу задается слушатель клика мышки.
Как мне сделать так, чтобы программно повторить первый клик (по которому пошла загрузка) и если он попал в один из лейблов инициировать слушателя этого объекта?

Сначала, я попробовал запомнить сам эвент, который случился при первом клике, но если делать dispatch этого события на stage или на группе, лежащие внутри лэйблы не откликаются.

Второй вариант: вытащить координаты первого клика, пробежать по всем родившимся лейблам насчет hitTestPoint и вызвать событие непосредственно на нужном элементе.
Но мне кажется первый вариант интересней, просто я неправильно им пользуюсь.
К тому же, при программном создании label, я не могу понять, в какой момент он получает реальные размеры width/height. Сразу после добавления в группу ширина по-прежнему 0, но в какой-то волшебный момент получает реальные значения. Из-за этого не получается сделать hitTestPoint.

Старый 20.10.2010, 11:05
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 2  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: 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.
Старый 20.10.2010, 11:36
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 3  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
по-моему можно так -
при клике на лейбл, вызываете метод, который вызывался при клике на стейдж.
реальная высота и ширина появляются после события INIT, соответственно на него надо просто подписаться.

Старый 20.10.2010, 12:25
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 4  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Цитата:
Сообщение от AlexDesinger Посмотреть сообщение
при клике на лейбл, вызываете метод, который вызывался при клике на стейдж.
Может я неправильно понял, но суть в том что метод лейбла производит манипуляции с самим лейблом, поэтому если его вынести в стейдж опять же встанет вопрос поиска нужного лейбла.

С инитом попробую.

Я зря наверно так подробно описал. Вот краткий вариант:
есть сцена, в ней n компонент (не важно чего, пусть спрайтов). Все спрайты слушают MouseEvent.CLICK. При человеческом клике спрайты откликаются. Нужно программно повторить это событие, чтобы спрайт откликнулся вновь. Спрайт запомнить нельзя.

В принципе, мне не сложно пробежать по всем элементам и сверить попали ли координаты, но элементов может быть несколько тысяч, при реальном клике флэш совершает такой же обход или у него какие-то более оптимизированные алгоритмы?

Старый 20.10.2010, 12:29
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 5  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
getObjectsUnderPoint
__________________
#flasher@irc.trg.ru:6667

Старый 20.10.2010, 12:31
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 6  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Цитата:
Сообщение от Obi Посмотреть сообщение
Вам это зачем? Мне кажется, что у вас просто не верно выбрано решение проблемы.
Сейчас уже не важно, просто интересно, можно ли программно повторить событие. dispatch вызывается на конкретном элементе, а реальное событие затрагивает все элементы сцены.


Последний раз редактировалось Vier; 20.10.2010 в 12:38.
Старый 20.10.2010, 12:53
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 7  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
нельзя
__________________
#flasher@irc.trg.ru:6667

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Нельзя, ибо это будет нарушение политики безопасности. Некоторые операции выполняются только по реальному клику.

Старый 20.10.2010, 13:28
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 9  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
Цитата:
Нужно программно повторить это событие, чтобы спрайт откликнулся вновь.
Не делайте так - это неправильная логика.
Либо создайте метод, который будет по e.target определять на что нажали и соответственно предпринимать действие, либо разбейте события, например -
стейдж реагирует на MOUSE_UP, а спрайты на CLICK, и создайте методы, которые в случае необходимости вызывайте из кода.

Старый 20.10.2010, 16:18
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 10  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Cпасибо, все понятно.

Цитата:
Сообщение от AlexDesinger Посмотреть сообщение
Не делайте так - это неправильная логика.
Либо создайте метод, который будет по e.target определять на что нажали и соответственно предпринимать действие, либо разбейте события, например -
стейдж реагирует на MOUSE_UP, а спрайты на CLICK, и создайте методы, которые в случае необходимости вызывайте из кода.
На самом деле у меня стейдж вообще ни на что не реагирует. Только спрайты. Проблема в том что спрайт который в target, к тому моменту когда я захочу повторить клик может вообще исчезнуть или поменять координаты итд. getObjectsUnderPoint вроде решает все проблемы.

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

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

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


 


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


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