|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Цитата:
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
нет, об очень медленном клике, типо нажал, потупил 10 минут не сдвигая мышь и отжал.
|
|
|||||
Это может показаться банальным, но, если не ошибаюсь, нужно это:
|
|
|||||
насколько понял, нужно отличить драг от клика
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; public class Main extends Sprite { private var touchP:Point; private var currP:Point; private var drag:Boolean; private var tol:Number = 10; private var body:Sprite; public function Main():void { body = new Sprite(); body.graphics.beginFill(0); body.graphics.drawRect(100, 100, 100, 40); addChild(body); body.addEventListener(MouseEvent.MOUSE_DOWN, body_mouseDown); body.addEventListener(MouseEvent.CLICK, body_click); } private function body_click(e:MouseEvent):void { if (!drag) { trace("CLICK"); } } private function body_mouseDown(e:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove); stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUp); touchP = new Point(stage.mouseX, stage.mouseY); currP = new Point(stage.mouseX, stage.mouseY); drag = false; } private function stage_mouseUp(e:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove); stage.removeEventListener(MouseEvent.MOUSE_UP, stage_mouseUp); } private function stage_mouseMove(e:MouseEvent):void { body.x += stage.mouseX - currP.x; body.y += stage.mouseY - currP.y; currP = new Point(stage.mouseX, stage.mouseY); if (Point.distance(currP, touchP) > tol) { drag = true; } } } } |
|
|||||
listener
|
Цитата:
Событие клика формируется на уровне приложения, т.е. логически. Традиционно, обрабатываются системные уведмления WM_LBUTTONDOWN|WM_LBUTTONUP, без каких-то там таймингов. Нажали-отпустили и все. Лишь бы отпустили над кнопкой же. И будет вам клик. Медленный или быстрый клик в этом контексте вообще рассматривать не уместно. Ибо клик - он и в африке клик. Так должно быть, по крайней мере пользователю любого возраста будет понятно, что происходит, когда он тыкает мышкой по кнопкам. Собственно, silin все уже озвучил - по DOWN запускаем DRAG (MOVE), потом в UP смотрим, был ли драг: если нет - то значит был клик . package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; public class Main extends Sprite { private var touchP:Point; private var currP:Point; private var drag:Boolean; private var tol:Number = 10; private var body:Sprite; public function Main():void { body = new Sprite(); body.graphics.beginFill(0); body.graphics.drawRect(100, 100, 100, 40); addChild(body); body.addEventListener(MouseEvent.MOUSE_DOWN, body_mouseDown); } private function body_mouseDown(e:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove); stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUp); touchP = new Point(stage.mouseX, stage.mouseY); currP = new Point(stage.mouseX, stage.mouseY); drag = false; } private function stage_mouseUp(e:MouseEvent):void { if (!drag) { trace("CLICK"); } stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove); stage.removeEventListener(MouseEvent.MOUSE_UP, stage_mouseUp); } private function stage_mouseMove(e:MouseEvent):void { body.x += stage.mouseX - currP.x; body.y += stage.mouseY - currP.y; currP = new Point(stage.mouseX, stage.mouseY); if (Point.distance(currP, touchP) > tol) { drag = true; } } } } |
|
|||||
.
|
Цитата:
|
|
|||||
Цитата:
|
|
|||||
Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
|
да, то что надо, просто думал правильно ли прикручивать на маусмув проверку на смещение, думал может есть какие-нибудь еще решения. Спасибо.
|
Часовой пояс GMT +4, время: 18:06. |
|
« Предыдущая тема | Следующая тема » |
|
|