不确定是否存在,但值得大家问一下:是否有内置方法来计算当前鼠标位置与给定组件之间的距离?如果没有,有没有一种简单的方法来构建这样的函数,适用于具有通用形状的组件?
谢谢你!答案 0 :(得分:1)
想想我已经为你做了一个解决方案,我不相信有任何内置的东西会直接为你做这件事虽然可能有比这更好的方法......但基本上任何解决方案我都可以想到基本上使用相同的概念,所以这里是:
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调用将DisplayObject的x / y位置转换为用于与鼠标位置进行比较的绝对坐标(注意您可能需要在移动处理程序中使用event.stageX,event.stageY,具体取决于您处理的对象,我不确定mouseX,mouseY是全局坐标)。同样如评论中所述,这只是考虑到形状的左上角不一定是最接近的边缘,你可能需要做一些形状特定的数学,除非有人有更新颖的方式。
答案 1 :(得分:1)
好吧,假设你想要从鼠标到左上角的距离(在这种情况下是Flex的默认值),只需使用毕达哥拉斯定理:
var d:int = Math.sqrt(Math.pow(theComponent.mouseX, 2) + Math.pow(theComponent.mouseY, 2));
同样,这将是距离'theComponent'左上角的距离。如果您希望它来自组件的中心,请执行以下操作:
var d:int = Math.sqrt(Math.pow(theComponent.mouseX - theComponent.width/2, 2) + Math.pow(theComponent.mouseY - theComponent.height/2, 2));
每个DisplayObject都有这个'mouseX / Y'属性,它总是相对于左上角。