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

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

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
По умолчанию Хорошая реализация CLICK + MOUSE_DOWN

К сожаления не нашел аналога работы виндосовского клика + mouseDown , Нашел только реализации типа
Добавляем таймер на проверку клика, если время между mouseDown и Up меньше скольки то там миллисекунд, то обрабатываем клик.

Но по идее клик - это когда сработал маусдаун, далее(возможно) произошло незначительное смещение курсора(человеческий фактор), прошло сколько угодно времени (может даже несколько секунд, все кликают по разному) потом сработал маусАп, - далее обрабатываем клик. Но как по правильному будет словить это вот незначительное смещение курсора, и правильно обработать mouseDown + mouseMove + mouseUp и click

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Что-то не понял проблемы. Зачем вообще ловить какое-то смещение? mouseUp отработает независимо от того было какое-то смещение или нет

Старый 16.12.2013, 12:00
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
как у меня сейчас:
есть переменная ключ - isClicked, по mouseDown ставлю ее true,

в хэндлере mouseMove - ставлю ее false

в хэндлере mouseUp -
Код AS3:
if (isClicked){
    onClick();
    return;
}
// дальше если нет клика делаем что-то по mouseUp
проблема такая - иногда , после маусдаун курсор немного сдвигается , когда жмешь на кнопку мыши, соответственно выполняется хэндлер mouseMove, и переменная ставится в false, и соответственно функция onClick() не выполняется(то есть клика не происходит ), что напрягает, нужно ее как-то обойти.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
аналога работы виндосовского клика + mouseDown
А что он делает?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Тогда можно сохранять mouseX и mouseY при нажатии в обработчике mouseDown, а в mouseMove проверять смещение курсора относительно этих сохраненных данных.

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Цитата:
Сообщение от iNils Посмотреть сообщение
А что он делает?
ну я писал что находил варианты как реализовать такой механизм, но там просто ставился таймер между маусдаун и маусап, если он маленький - значит это клик, а в виндоусе между маусдауном и апом может пройти хоть 10 минут(мало ли на мой объект будет кликать дама бальзаковского возраста), и он обработает его как клик.



По поводу изменения координат, мой объект - это шкала(по маусмуву она должна перемещаться, но также на ней можно кликать, чтобы выбрать значение), если допустим я ее перемещу влево а потом верну на те же координаты, тогда получится что будет обрабатываться клик, но драг то был.

А, ну хотя можно хранить максимальное смещение, и его проверять..

Старый 16.12.2013, 14:55
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 7  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
https://github.com/fljot/Gestouch

quickstart:
Код AS3:
var tap:TapGesture = new TapGesture(yourBar);
tap.addEventListener(GestureEvent.GESTURE_RECOGNIZED, onTap);
//tap.slop = 0;// например, так можно сдвигать только на 0 пикселей. по-умолчанию там подходящее для тачкринов значение
//tap.maxTapDuration = 2000;//например, так после 2 секунд "клика" уже не будет. по-умолчанию 1500мс
 
var pan:TapGesture = new PanGesture(yourBar);
pan.addEventListener(GestureEvent.GESTURE_BEGAN, onPan);
pan.addEventListener(GestureEvent.GESTURE_CHANGED, onPan);
 
... onPan(event:GestureEvent):void
{
    pan.offsetX/Y
}
при перемещении тап(клик) автоматически отменяется (если явно не указано обратное).

Там сейчас скорее всего есть одна беда с памятью, так что для хорошего удаления лучше использовать dispose() на жестах.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Код AS3:
var lastMouseX:Number = 0;
var lastMouseY:Number = 0;
 
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
 
function onMouseDown(e:MouseEvent):void {
    lastMouseX = this.mouseX;
    lastMouseY = this.mouseY;
}
 
function onMouseUp(e:MouseEvent):void {
    // проверяем, если курсор не отъехал более, чем на 10 пикселей, то считаем это кликом
    if (Point.distance(new Point(lastMouseX, lastMouseY), new Point(this.mouseX, this.mouseY)) < 10) {
        onClick();
        return;
    } 
}
Вот так, и не нужно ничего мудрить


Последний раз редактировалось caseyryan; 16.12.2013 в 19:24. Причина: изменил MouseY, на mouseY
Старый 16.12.2013, 18:02
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
Point.distance(new Point(lastMouseX, lastMouseY), new Point(this.mouseX, this.MouseY))
Очень ленивая строчка
__________________
hauts.ru

Старый 16.12.2013, 19:23
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
да) не заметил ошибки) писал прямо здесь

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

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

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


 


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


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