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

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

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Question Как разобрать события мыши?

Клиент попросил сделать разную реакцию объекта на мышиные события. Стал тестировать CLICK, MOUSE_DOWN, MOUSE_UP, DOUBLE_CLICK. Сначала срабатывает мышь вниз, затем мышь вверх после этого клик. Если после первого клика коротко по времени сделать второй клик то срабатывает еще раз вниз, вверх и двойной клик уже вместо обычного клика. При этом можно нажать кнопку и ждать полчаса а потом отпустить ее и сделать сразу второй клик тоже будет событие двойной клик.
У меня задача при нажатии на кнопку делать плавное увеличение параметра. Когда кнопку отпускают прекратить увеличение. При простом клике делать увеличение параметра скачками. И есть обект который надо выделять кликом и при двойном клике активировать.
Пока кроме как через секундомер который будет проверять как давно кнопку на мыше нажали, когда последний клик был и т.п. не могу придумать как отличать одно событие от другого.

Приходилось кому то это делать? какие приемы использовали поделитесь
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 29.01.2009 в 12:53. Причина: собственная грамотность
Старый 29.01.2009, 12:55
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я думаю что ваш подход он и есть правельный.
__________________
Hell is the possibility of sanity

Старый 13.03.2009, 14:45
Arif flasher вне форума Посмотреть профиль Отправить личное сообщение для Arif flasher Посетить домашнюю страницу Arif flasher Найти все сообщения от Arif flasher
  № 3  
Ответить с цитированием
Arif flasher
[+4 14.03.09]
 
Аватар для Arif flasher

Регистрация: Mar 2009
Адрес: Баку, город ветров
Сообщений: 51
Отправить сообщение для Arif flasher с помощью ICQ Отправить сообщение для Arif flasher с помощью MSN Отправить сообщение для Arif flasher с помощью Skype™
все еще нужна помощь по этому вопросу? подход не правильный через секундомер геморрой будет. Лучше ентер_фрейм использовать.
Могу поподробнее обьяснить если надо

Старый 13.03.2009, 14:51
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 4  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Будьте любезны) я через секундомер делал)
Скорость между кадрами не постоянная величина, а вот время по getTimer() дает достаточно достоверное значение между событиями. Я воспользовался этим способом
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 13.03.2009, 15:21
Arif flasher вне форума Посмотреть профиль Отправить личное сообщение для Arif flasher Посетить домашнюю страницу Arif flasher Найти все сообщения от Arif flasher
  № 5  
Ответить с цитированием
Arif flasher
[+4 14.03.09]
 
Аватар для Arif flasher

Регистрация: Mar 2009
Адрес: Баку, город ветров
Сообщений: 51
Отправить сообщение для Arif flasher с помощью ICQ Отправить сообщение для Arif flasher с помощью MSN Отправить сообщение для Arif flasher с помощью Skype™
эх, я перепутал, сори. я не так понял вопрос. ага, таймер лучше подходит для определение клик это или маус_вниз.

Старый 13.03.2009, 17:22
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 6  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Эх а я так надеялся на красивое решение)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 13.03.2009 в 17:57.
Старый 09.04.2009, 13:55
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 7  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Нашел решение по данной теме. Все гениальное оказалось просто.
Решаем следующую задачу. Есть карта. Когда на ней нажимают кнопку и начинают двигать мышь необходимо двигать карту. На самой карте находятся объекты которые также реагируют на клик по ним мышкой и могут выполнять действие от выделения до обновления карты, это уже зависит от объекта.
Вот какое решение получилось в итоге:
Заводим значение минимальноеДопустимоеСмещение - это чтобы не запускать движение карты когда мышка непроизвольно дернулась после нажатия, и логическую флагДвижения. Объекты на карте отрабатывают свои клики как положено. Далее на самой карте фиксируем два обработчика для событий MOUSE_DOWN, и CLICK причем последний в фазе Capture
Код AS3:
addEventListener(MouseEvent.MOUSE_DOWN, hnMouseDownMap);
addEventListener(MouseEvent.CLICK, hnMouseClickMap,true);
в hnMouseDownMap будем сбрасывать флаг движения и готовить все необходимые механизмы для отслеживания движения
Код AS3:
private function hnMouseDownMap(e:MouseEvent):void 
		{
			startX = mouseX;
			startY = mouseY;
			vMoving = new _Vector();
			addEventListener(MouseEvent.MOUSE_MOVE, hnMouseMoveMap);
			addEventListener(MouseEvent.MOUSE_UP, hnMouseUpMap);
		}
Если далее при движении мыши будет зафиксировано смещение мыши больше чем наше минимальноеДопустимоеСмещение то устанавливаем флаг флагДвижения.
При клике по карте в фазе Capture отлавливаем событие и если было зафиксировано движение (флагДвижения в истине) то отменяем распространение клика на потомков
Код AS3:
private function hnMouseClickMap(e:MouseEvent):void{
if (флагДвижения)
{
e.stopPropagation();
}
}
Вот наши потомки клик и не получили когда нам это не нужно. Если все необходимо делать на одном объекте то вполне можно применять вариант с таймером.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 09.04.2009 в 14:06.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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