2011-03-28 69 views
0

不確定這是否存在,但值得問問大家:是否有內置方法來計算當前鼠標位置和給定組件之間的距離?如果沒有,是否有一種簡單的方法來構建這樣的函數,它適用於具有通用形狀的組件?鼠標和組件之間的距離

謝謝!

+0

你正在尋找這個距離到形狀上的最近點或形狀的中心? – 2011-03-28 23:33:35

+0

理想情況下距離形狀上的最近點 - 但我意識到這可能太難通用形狀的問題。我會採取合理的近似。 – 2011-03-29 00:25:42

+0

我可以問你想用這個完成什麼嗎? – 2011-03-29 02:29:46

回答

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」屬性,它始終是相對於左上角。

+0

感謝您對mouseX的澄清,mouseY @J_A_X我找不到記錄在任何地方,應該只是做了一些更多的測試,我想。 – shaunhusain 2011-03-29 15:16:50

+0

您是否嘗試過Adobe API?一切都在那裏...... http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/ – 2011-03-29 15:31:47

+0

Yah通常我發現文檔是好的,但在這種情況下,沒有明確描述事實mouseX將相對於組件,而不是階段或組件容器或其他東西...只提及有關旋轉,但沒有更多http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash /display/DisplayObject.html#mouseX – shaunhusain 2011-03-29 15:38:32

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僅僅是一個標籤的處理程序只設置在這個例子中的應用程序,但基本上這是唯一重要的部分是用於操作給出的距離函數on point和localToGlobal調用將DisplayObject的x/y位置轉換爲絕對座標以與鼠標位置進行比較(注意,您可能需要在移動手柄中使用event.stageX,event.stageY呃取決於你要處理的對象,我不確定那個mouseX,mouseY是全局座標)。同樣正如評論中指出的那樣,這只是考慮到形狀的左上角不一定是最接近的邊緣,否則你可能需要做一些形狀特定的數學計算,除非有更新穎的方法。