Apache flex 鼠标和组件之间的距离

Apache flex 鼠标和组件之间的距离,apache-flex,flex4,Apache Flex,Flex4,不确定这是否存在,但值得问大家:是否有一个内置的方法来计算当前鼠标位置和给定组件之间的距离?如果没有,是否有一种简单的方法来构建这样的函数,该函数适用于具有通用形状的组件 谢谢大家! 我想我已经为你准备好了一个解决方案,我不相信有任何内置的东西可以直接为你做到这一点,尽管可能有比这更好的方法。。。但基本上,我能想到的任何解决方案基本上都使用相同的概念,因此: private var lastClickedComponent:DisplayObject; private var l

不确定这是否存在,但值得问大家:是否有一个内置的方法来计算当前鼠标位置和给定组件之间的距离?如果没有,是否有一种简单的方法来构建这样的函数,该函数适用于具有通用形状的组件


谢谢大家!

我想我已经为你准备好了一个解决方案,我不相信有任何内置的东西可以直接为你做到这一点,尽管可能有比这更好的方法。。。但基本上,我能想到的任何解决方案基本上都使用相同的概念,因此:

    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只是一个标签本例中的处理程序只是在应用程序上设置的,但基本上唯一重要的部分是用于操作点的距离函数和用于将DisplayObject的x/y位置转换为绝对坐标以与鼠标位置进行比较的localToGlobal调用(请注意,您可能需要在移动处理程序中使用event.stageX、event.stageY,具体取决于您处理它的对象,我不确定mouseX、mouseY是否为全局坐标)。此外,如评论中所述,这一条只考虑形状的左上角,不一定是最近的边,因为除非有人有更新颖的方法,否则您可能需要进行一些形状特定的数学运算。

好的,假设您想要鼠标到左上角的距离(本例中为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”属性,它总是相对于左上角。

您是在寻找到形状上最近点的距离,还是到形状中心的距离?理想情况下是到形状上最近点的距离-但我意识到对于一般形状来说,这可能太难了。我会给出一个理由能干的近似。我能问一下你想用它来完成什么吗?我希望用它来按鼠标和它们之间的距离成比例地淡入组件。因此近似可能是可行的。幸运的是,因为它听起来好像不会有一个通用的解决方案。感谢对mouseX的澄清,mouseY@J_a_X我找不到它在任何有文档记录的地方,我想你应该做更多的测试。你试过Adobe API吗?所有的东西都在那里…是的,一般来说,我觉得文档很好,但在这种情况下,没有明确的描述mouseX将与组件相关,而不是阶段或组件容器或其他东西除此之外……只提及旋转,仅此而已