0

我有两个组件,其中一个是另一个组件,我需要用 mouseDown 和 MouseUp 在它们之间画一条线问题是:我不知道如何找到 shape1 和 shape2 的真实 x,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;
        }

        }

}

4

1 回答 1

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>
于 2013-05-19T15:06:52.110 回答