2013-05-19 67 views
0

我有兩個組件,其中一個是另一個孩子,我需要繪製鼠標按下和MouseUp 它們之間的線的問題是:我不知道如何找到真正的X,shape1和shape2 Y的如何在柔性得出兩個組件之間的直線

(組件是我寫的一個遞歸成分)

有一段我的代碼,但它不正確

工作的我的組件:

<mx:Box id="component" borderStyle="solid" width="100%" height="500"> 
    <local:compforSM id="compForSS" label="پرسپکتیو" rotateLabel="true" statusColor="{0x008000}" layoutType="{compforSM.HORIZENTAL}" width="80%" height="80%" creationComplete="createComplete()" /> 

我mouseDownHandler:使用

private function mouseDown(e:MouseDownOrUpEvent):void { 
if (e.target != null) { 
if(firstObject == null){ 
firstObject = e.target; 
     firstPoint = component.localToGlobal(new Point(component.x, component.y)); 
     firstPoint.x = mouseX - firstPoint.x; 
     firstPoint.y = mouseY - firstPoint.y; 
     } 

     } 

}

回答

0

我已經一段時間沒有這樣做,但我覺得你首先會想轉換成一個全球性的點使用的組件左上角座標。

然後,如果在舞臺上,但在另一個組件上不拉絲,你會想全球點轉換回本地相對於該組件的一個點。

事情是這樣的:

var globalPoint:Point = component.localToGlobal(new Point(0, 0)); 

var newLocalPoint:Point = componentWhereYouWantToDrawIfNotStage.globalToLocal(globalPoint); 

編輯:

我不知道它到底是什麼,你要完成。我假設你想繪製鼠標指針的某個地方 - 但不確定。我也不知道你的遞歸組件是什麼意思。

下面是一些代碼,以從內到一個外部部件的中心處的中心畫線。我在所有組件的頂部使用畫布以確保線條可見,無論組件是什麼。

<?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" 
       creationComplete="onCreationComplete();"> 

    <fx:Script> 
     <![CDATA[ 

     private function onCreationComplete():void 
     { 
      var globalInnerPoint:Point = innerComponent.localToGlobal(new Point(innerComponent.width/2, innerComponent.height/2)); 
      var globalOuterPoint:Point = outerCcomponent.localToGlobal(new Point(outerCcomponent.width/2, outerCcomponent.height/2)); 

      var canvasLayerInnerPoint:Point = canvasLayer.globalToLocal(globalInnerPoint); 
      var canvasLayerOuterPoint:Point = canvasLayer.globalToLocal(globalOuterPoint); 

      canvasLayer.graphics.lineStyle(4, 0xFF0000); 
      canvasLayer.graphics.moveTo(canvasLayerInnerPoint.x, canvasLayerInnerPoint.y); 
      canvasLayer.graphics.lineTo(canvasLayerOuterPoint.x, canvasLayerOuterPoint.y); 
     } 
     ]]> 
    </fx:Script> 


    <mx:Box id="outerCcomponent" borderStyle="solid" width="100%" height="500"> 
     <mx:Box id="innerComponent" width="80%" height="80%" borderStyle="solid"/> 
    </mx:Box> 

    <mx:Canvas id="canvasLayer" height="100%" width="100%" /> 

</s:Application> 
+0

謝謝斯特凡。第一線幫助,但左上角不完全是我的組件,它有點令人沮喪的左上角!第二行是指未知點!!! – sami

+0

增加了一些代碼來繪製從該內部部件與所述外部部件的中心的中心的線。希望這可以幫助。 – Stefan

+0

工作:)謝謝@Stefan – sami

相關問題