我有一段时间没有这样做了,但我认为您首先希望通过使用组件左上角坐标来转换为全局点。
然后,如果不是在舞台上而是在另一个组件上绘图,您可能希望将全局点转换回相对于该组件的局部点。
像这样的东西:
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>