2017-07-18 2 views
0

J'ai un peu de mal à essayer de tracer une ligne sur AS3.Position exacte de l'élément actionscript3

Le dessin est une partie facile, mais la partie difficile est de savoir comment obtenir la position du composant.

J'essaie de définir une hiérarchie, si les fils sont connectés au père par des lignes. J'ai la structure et les composants sur l'écran mais quand j'essaie de tracer une ligne entre les noeuds je ne peux pas trouver la position des fils.

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

L'élément est situé sur la VGroup via addElement et partout où je regarde x = 0 et y = 0.

Tout le monde sait comment obtenir les bonnes coordonnées. de cet élément?

Merci.

Répondre

1

Probablement ce que vous avez besoin est:

// 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); 

Gardez à l'esprit que les deux element.fatherJoin et coord doit être (pas nécessairement directement, ils pourraient être les enfants des enfants) attachés à mettre en scène, sinon localToGlobal et globalToLocal ne produira pas les résultats corrects.

UPD: J'ai essayé ceci.

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

J'ai déjà pensé à cela, mais localToGlobal, obtient toujours la même valeur (607,87) et lorsqu'il est traduit en global il obtient (0,0). Oui les deux élément et coord sont des enfants d'enfants d'enfants .. (Je pense que c'est pourquoi je ne peux pas obtenir la bonne position). attaché à la scène. Thnx pour votre réponse. – Jaime

+1

@Jaime J'ai mis à jour mon message. Le fait que vous obtenez (0,0) dans le processus signifie probablement que votre code s'exécute ** avant ** les composants sont initialisés, correctement placés et ainsi de suite. Flex prend comme quelques images du début de l'application avant que tout soit créé et placé correctement. – Organis