Actionscript 3 如何获取一个显示对象在祖先显示对象之间的总偏移量?

Actionscript 3 如何获取一个显示对象在祖先显示对象之间的总偏移量?,actionscript-3,flash,apache-flex,Actionscript 3,Flash,Apache Flex,如何获得嵌套容器和根容器(如stage或spark应用程序)中显示对象之间的距离 例如: <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" x

如何获得嵌套容器和根容器(如stage或spark应用程序)中显示对象之间的距离

例如:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"

                       applicationComplete="applicationCompleteHandler(event)"
                       >


    <fx:Script>
        <![CDATA[

            protected function applicationCompleteHandler(event:FlexEvent):void {
                var point:Point = new Point(nestedButton.x, nestedButton.y);
                var localToGlobalPoint:Point = this.localToGlobal(point);
                var globalToLocalPoint:Point = this.globalToLocal(point);
                var localToContentPoint:Point = this.localToContent(point);

                trace("Button x: " + nestedButton.x);
                trace("Button layout bounds x: " + nestedButton.getLayoutBoundsX());
                trace("Button to main container localToGlobal x: " + localToGlobalPoint.x);
                trace("Button to main container globalToLocal x: " + globalToLocalPoint.x);
                trace("Button to main container localToContent x: " + localToContentPoint.x);
            }

        ]]>
    </fx:Script>

    <mx:Canvas id="mainCanvas" top="10" left="10">
        <mx:Canvas top="10" left="10">
            <s:Group x="10" y="10">
                <s:Button id="sparkButton2" label="spark button" x=10 y="10"/>
            </s:Group>
        </mx:Canvas>
    </mx:Canvas>

</s:WindowedApplication>


如果按钮嵌套在3个容器中,且每个容器距离上一个容器的边缘
10
像素,且按钮距离其边缘
10
像素,则总
x
值应为
40
。这不是我得到的价值。每次调用中的
x
值跟踪到
0

这方面似乎没有Flash API。因此,看起来您需要两个显示对象,并获得它们的全局位置,然后减去差值

这是一个函数,它似乎正在工作:

public function distanceBetweenDisplayObjects(source:Object, target:Object):Point {
    var sourceRelativePoint:Point;
    var sourceLocalToGlobalPoint:Point;
    var containerLocalToGlobalPoint:Point;
    var x:Number;
    var y:Number;

    var zeroPoint:Point = new Point(0, 0);
    sourceLocalToGlobalPoint = source.localToGlobal(zeroPoint);
    containerLocalToGlobalPoint = target.localToGlobal(zeroPoint);

    var sourceDifference:Point = sourceLocalToGlobalPoint.subtract(containerLocalToGlobalPoint);
    var containerDifference:Point = containerLocalToGlobalPoint.subtract(sourceLocalToGlobalPoint);

    return sourceDifference;
}
用法:

var sourceDifference:Point = distanceBetweenDisplayObjects(nestedButton, mainContainer);

您可能需要执行
nestedButton.localToGlobal(newpoint())
(将nestedButton的本地0,0转换为stage位置),除非
是`nestedButton'的直接父项,否则它将是相同的