2017-07-18 81 views
0

我在测试AS3上绘制一条线时遇到了一些麻烦。确切的元素位置actionscript3

绘图是一个简单的部分,但棘手的部分是如何获取组件的位置。

我试图设置一个层次结构,儿子是由线连接到父亲。 我有屏幕上的结构和组件,但是当我尝试在节点之间绘制一条线时,我无法找到儿子的位置。

public function drawLines():void{ 
       for(var i:int=1; i<= _maxLevel ; i++){ 
         var vGroup:*=treeLevel.getElementAt(i); 
         for(var j:int = 1; j<vGroup.numChildren ;j++){ 
          var element:* = vGroup.getElementAt(j); 
          trace(element.fatherJoin);//a checkbox for the union 
          trace(element.sonJoin);//another checkbox for the union 
          var coord:* = buscarCoord(element.father,i-1);//with this function I get the father checkbox 
          coord.graphics.lineStyle(3, 0xFF0000, 1); 

//onwards is the fail code, I can't get the correct x and y to draw. 
          var pt:Point = new Point(element.fatherJoin.x,element.fatherJoin.y); 
          pt = this.localToGlobal(pt); 
          coord.graphics.lineTo(pt.x,pt.y); 
         } 
       } 
      } 

元素通过addElement设置在vgroup上,无处不在我看上去x = 0和y = 0。

任何人都知道如何得到正确的坐标。这个元素?

谢谢。

回答

1

也许你需要的是:

// Create an empty point of (0,0). 
var aPoint:Point = new Point; 

// Get the global coordinates of the object you want. 
aPoint = element.fatherJoin.localToGlobal(aPoint); 

// Translate it to the coordinates of your canvas. 
aPoint = coord.globalToLocal(aPoint); 

// Now draw. 
coord.graphics.lineTo(aPoint.x, aPoint.y); 

请记住,这两个element.fatherJoin坐标必须是(必须是直接没有,他们可能是孩子的孩子)附着阶段,否则localToGlobalglobalToLocal将不会产生正确的结果。

UPD:我试过了。

var C:Sprite = new Sprite; 
var Z:Sprite = new Sprite; 

Z.x = 100; 
Z.y = 200; 

C.x = 300; 
C.y = 400; 

// Z is not attached to anything. 
trace(Z.globalToLocal(new Point)); 
// output: (x=-100, y=-200) 

C.addChild(Z); 

// C is not attached to stage. 
trace(Z.globalToLocal(new Point)); 
// output: (x=-400, y=-600) 

addChild(C); 

// C is attached to stage. 
trace(Z.globalToLocal(new Point)); 
// output: (x=-400, y=-600) 
+0

我已经想到了,但localToGlobal,总是得到相同的值(607,87),并且当转换为全局时它得到(0,0)。是的,元素和坐标是孩子的孩子的孩子..(我认为这就是为什么我不能得到正确的位置)。附在舞台上。 Thnx为您的答案。 – Jaime

+1

@Jaime我更新了我的帖子。你在这个过程中得到的事实(0,0)可能意味着你的代码在组件初始化,正确放置等之前执行**。在创建并正确放置所有内容之前,Flex会从应用程序启动中抽取几帧。 – Organis