2009-07-14 17 views
0

Beispiel:Eltern-Kind-Constraints

var circle1 :Canvas = new Canvas(); 
var circle2 :Canvas = new Canvas(); 

circle1.addChild(circle2) 
circle1.scaleX = 2; 

Nach dem Beispiel vor, wenn Flash circle2 machen, weil es Kind zu circle1 ist es skaliert werden. Gibt es eine Möglichkeit, dass ich circle1 ohne affect circle2 skalieren kann oder was kann ich tun, um circle2 zu erstellen, damit es dieselbe Skalierung haben kann?

Antwort

2

Es ist ganz einfach, nur kompensieren, dass Sie die Größe des Elternteils verdoppeln.

var circle1 :Canvas = new Canvas(); 
var circle2 :Canvas = new Canvas(); 

circle1.addChild(circle2) 
circle1.scaleX = 2; 
circle2.scaleX = .5; // Added 

Eine vielleicht praktische Funktion, die Pflege von Skalierungsfragen nimmt könnten sein:

function setParentOnlyScaleX(parent:Canvas, scale:Number):void { 
    parent.scaleX = scale; 
    for (var i = 0; i < parent.numChildren - 1; ++i) { 
     var child:Canvas = circle1.getChildAt(i); 
     child.scaleX = 1/scale; 
    } 
} 

Der erste Schnipsel dann wäre:

var circle1 :Canvas = new Canvas(); 
var circle2 :Canvas = new Canvas(); 

circle1.addChild(circle2) 
setParentOnlyScale(circle1, 2); 
+0

Das Problem hier ist, dass ich die Skala auf MOUSE_MOVE Ereignis mache. Wenn ich also die Kinderskala mit der Elternskala bei jeder Mausbewegung ändere, hat sie einen falschen Wert. Vielleicht, wenn ich ein Ereignis abfangen kann, bevor RENDER die Child-Matrix ändert und nach dem RENDER es zurück ändert. Gibt es ein Ereignis, nachdem RENDER abgeschlossen ist? – Alexandru

+0

Ich habe den Code korrigiert. Aber was meinst du damit, den falschen Wert zu haben? Auf diese Weise hat das untergeordnete Sprite immer die gleiche Größe. – Dykam