Flex 3: способ измерить, насколько далеко продвинулась мышь с момента нажатия / удержания? - PullRequest
0 голосов
/ 14 октября 2011

У меня есть холст со значком в правом верхнем углу.
То, что я хотел бы, это:

  • пользователь нажимает на иконку
  • пользователь удерживает кнопку мыши
  • Пользователь перемещает мышь влево / вправо, чтобы переместить холст в том же направлении.

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

Есть ли способ узнать, на сколько пикселей переместилась мышь с момента щелчка мыши?

Ответы [ 4 ]

2 голосов
/ 14 октября 2011

Я не уверен, хотите ли вы узнать абсолютную разницу в положении при перетаскивании мышью или записать расстояние, пройденное мышью.

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

Простой пример (flex 3)

<mx:Script>
    <![CDATA[

        private var originalX:int;
        private var originalY:int;

        private var diffX:int;
        private var diffY:int;

        private function onBoxClicked(e:MouseEvent):void
        {
            originalX = e.stageX;
            originalY = e.stageY;

            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoved);
            stage.addEventListener(MouseEvent.MOUSE_UP, onDragComplete);
        }

        private function onMouseMoved(e:MouseEvent):void
        {

            diffX = e.stageX > originalX ? e.stageX - originalX 
                                         : originalX - e.stageX;

            diffY = e.stageY > originalY ? e.stageY - originalY 
                                         : originalY - e.stageY;

            trace('Mouse moved, cursor has travelled (x:' + diffX + ', y:' + diffY + ')');
        }

        private function onDragComplete(e:MouseEvent):void
        {
            trace('Mouse released, cursor has travelled (x:' + diffX + ', y:' + diffY + ')');
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoved);
            stage.removeEventListener(MouseEvent.MOUSE_UP, onDragComplete);
        }

    ]]>
</mx:Script>

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

1 голос
/ 14 октября 2011

В MOUSE_DOWN MouseEvent получить mouseX в MOUSE_MOVE MouseEvent получить mouseX сравнить два значения, и вы получите свой ответ.Удостоверьтесь, что вы обновили старый mouseX новым mouseX, если сопоставленное значение превышает желаемое значение.

0 голосов
/ 14 октября 2011

Я не уверен, что полностью вас понял, но, может быть, вы хотите что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               mouseUp="removeEventListener(MouseEvent.MOUSE_MOVE, foo)">
    <fx:Script>
        <![CDATA[
            private function foo(event:MouseEvent):void
            {
//              if(mouseX == someNumber)... do what you got to do!!!
            }
        ]]>
    </fx:Script>
    <s:Button mouseDown="addEventListener(MouseEvent.MOUSE_MOVE, foo)"/> //Button icon what ever

Я почти уверен, что вы можете сделать то же самое в Flex 3.

0 голосов
/ 14 октября 2011

При каждом событии перемещения мыши вы смотрите на координаты mouseX и mouseY. Если вы переместили желаемую сумму, вы вызываете функцию, которая перемещает ваш значок. Я что-то здесь упускаю? Это не должно быть слишком сложно, я думаю.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...