0

それらの1つが別の子である2つのコンポーネントがあり、それらの間に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 に答える