|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
Хорошая реализация CLICK + MOUSE_DOWN
К сожаления не нашел аналога работы виндосовского клика + mouseDown , Нашел только реализации типа
Добавляем таймер на проверку клика, если время между mouseDown и Up меньше скольки то там миллисекунд, то обрабатываем клик. Но по идее клик - это когда сработал маусдаун, далее(возможно) произошло незначительное смещение курсора(человеческий фактор), прошло сколько угодно времени (может даже несколько секунд, все кликают по разному) потом сработал маусАп, - далее обрабатываем клик. Но как по правильному будет словить это вот незначительное смещение курсора, и правильно обработать mouseDown + mouseMove + mouseUp и click |
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
как у меня сейчас:
есть переменная ключ - isClicked, по mouseDown ставлю ее true, в хэндлере mouseMove - ставлю ее false в хэндлере mouseUp - проблема такая - иногда , после маусдаун курсор немного сдвигается , когда жмешь на кнопку мыши, соответственно выполняется хэндлер mouseMove, и переменная ставится в false, и соответственно функция onClick() не выполняется(то есть клика не происходит ), что напрягает, нужно ее как-то обойти. |
|
|||||
Тогда можно сохранять mouseX и mouseY при нажатии в обработчике mouseDown, а в mouseMove проверять смещение курсора относительно этих сохраненных данных.
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
ну я писал что находил варианты как реализовать такой механизм, но там просто ставился таймер между маусдаун и маусап, если он маленький - значит это клик, а в виндоусе между маусдауном и апом может пройти хоть 10 минут(мало ли на мой объект будет кликать дама бальзаковского возраста), и он обработает его как клик.
По поводу изменения координат, мой объект - это шкала(по маусмуву она должна перемещаться, но также на ней можно кликать, чтобы выбрать значение), если допустим я ее перемещу влево а потом верну на те же координаты, тогда получится что будет обрабатываться клик, но драг то был. А, ну хотя можно хранить максимальное смещение, и его проверять.. |
|
|||||
https://github.com/fljot/Gestouch
quickstart: 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() на жестах. |
|
|||||
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 |
Часовой пояс GMT +4, время: 20:51. |
|
« Предыдущая тема | Следующая тема » |
|
|