2016-10-13 5 views
1

ステージやスパークアプリケーションのように、ネストされたコンテナとルートコンテナの表示オブジェクトからの距離を取得するにはどうすればよいですか?例えば祖先の表示オブジェクトの間で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画素であり、ボタンはそれから10画素総x値があるべきEdgeのれる場合40 。それは私が得ている価値ではありません。各コールの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

このためのFlash APIはないようです。つまり、2つの表示オブジェクトを取り、その位置をグローバルに取得して差を引くように見えます。変換( `nestedButtonのローカル;

var sourceDifference:Point = distanceBetweenDisplayObjects(nestedButton, mainContainer); 
関連する問題