2016-10-13 7 views
1

스테이지 나 스파크 애플리케이션과 같이 중첩 된 컨테이너와 루트 컨테이너에있는 표시 객체와의 거리를 어떻게 얻을 수 있습니까? 예를 들어조상 표시 객체간에 한 표시 객체의 총 오프셋을 얻으려면 어떻게해야합니까?

:

<?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 픽셀하고 40이어야 총 x 값 에지 년대 버튼 10 픽셀되면 . 그건 제가 얻고있는 가치가 아닙니다. 각 통화의 x 값은 0으로 추적됩니다.

+0

당신은 가능성이'nestedButton.localToGlobal을 수행 할 (새 포인트()) :

여기 함수 그리고 그것은 작동 것처럼 보인다 :

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; } 

사용법 0,0을 스테이지 위치로 이동), 'this'가'nestedButton '의 직접적인 부모가 아니라면 동일 할 것입니다 – BadFeelingAboutThis

답변

1

플래시 API가없는 것 같습니다. 따라서 두 개의 표시 객체를 가져 와서 전역 적으로 자신의 위치를 ​​얻은 다음 그 차이를 뺀 것처럼 보입니다. 변환 (`nestedButton의 로컬;

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