Расстояние между мышью и компонентом - PullRequest
0 голосов
/ 29 марта 2011

Не уверен, что это существует, но стоит спросить вас всех: есть ли встроенный метод для вычисления расстояния между текущей позицией мыши и данным компонентом? Если нет, есть ли простой способ создать такую ​​функцию, которая работает для компонентов с общими формами?

спасибо!

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Хорошо, скажем, вы хотите расстояние от мыши до верхнего левого угла (в данном случае это значение по умолчанию для Flex), просто используйте теорему Пифагора:

var d:int = Math.sqrt(Math.pow(theComponent.mouseX, 2) + Math.pow(theComponent.mouseY, 2));

Опять же, это будет расстояние от верхнего левого угла «Компонента». Если вы хотите, чтобы он был из центра компонента, сделайте это:

var d:int = Math.sqrt(Math.pow(theComponent.mouseX - theComponent.width/2, 2) + Math.pow(theComponent.mouseY - theComponent.height/2, 2));

Каждый DisplayObject имеет это свойство mouseX / Y, которое всегда относительно верхнего левого угла.

1 голос
/ 29 марта 2011

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

    private var lastClickedComponent:DisplayObject;
    private var lastClickedGlobalPos:Point;

    protected function application1_clickHandler(event:MouseEvent):void
    {
        // TODO Auto-generated method stub
        lastClickedComponent = event.target as DisplayObject;
        if(lastClickedComponent)
            lastClickedGlobalPos = lastClickedComponent.parent.localToGlobal(new Point(lastClickedComponent.x,lastClickedComponent.y));
    }

    private function distanceToLastClicked():void
    {
        if(lastClickedComponent)
        {
            distanceLabel.text = Point.distance(lastClickedGlobalPos,new Point(mouseX,mouseY)).toString();
        }
    }


    protected function application1_mouseMoveHandler(event:MouseEvent):void
    {
        distanceToLastClicked();
    }

distanceLabel - это просто метка, обработчики которой просто установлены в приложении для этого примера, но в основном единственная важная часть - это функция расстояния, заданная дляработа с точками и вызов localToGlobal для преобразования положения x / y объекта DisplayObject в абсолютные координаты для сравнения с положением мыши (обратите внимание, что вам может понадобиться использовать event.stageX, event.stageY в обработчике перемещения в зависимости от того, какой объект выЯ не уверен, что mouseX, mouseY - это глобальные координаты).Также, как отмечено в комментарии, этот будет учитывать только верхний левый угол фигуры, не обязательно самый близкий край, для этого вам, вероятно, потребуется выполнить некоторую математику, специфичную для фигуры, если у кого-то нет более нового способа.

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