Я мог видеть причины (слои, видимость, mouseChildren и т. Д.), Что вы хотите, чтобы дочерний элемент принадлежал родителю, но не получал его геометрические преобразования.
Это зависит от того, какой именно эффект вы ищете, но вы можете обратить вспять эффекты аффинного преобразования родителя (геометрия - иначе масштабировать / повернуть / перевести), применив, например, обратную матрицу преобразования родителей в контейнер между:
В этом примере, который я поднял, родительский контейнер (красная точка) перемещается / поворачивается / масштабируется, а дочерний (синяя точка) остается статичным, потому что я создал контейнер между
это легко инвертирует эффекты родительских преобразований, используя Matrix.invert (ПРИМЕЧАНИЕ: вычисления выполняются для каждого кадра). Вы могли бы сделать это без контейнера, но тогда вам нужно было бы позаботиться о том, как вы воспитали ребенка.
Вам нужно будет оптимизировать его под ваши требования, но я просто показываю, что это возможно, если не просто. =)
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.utils.setInterval;
[SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]
public class tst extends Sprite
{
public function tst():void
{
var prnt:Sprite = new Sprite();
var cont:Sprite = new Sprite();
var child:Sprite = new Sprite();
prnt.addChild(cont);
cont.addChild(child);
prnt.graphics.beginFill(0xff0000);
prnt.graphics.drawCircle(0, 0, 10);
child.graphics.beginFill(0x0000ff);
child.graphics.drawCircle(0, 0, 10);
cont.addEventListener(Event.EXIT_FRAME, function(e:Event):void {
var m:Matrix = prnt.transform.matrix.clone();
m.invert();
cont.transform.matrix = m;
});
var n:Number = 0;
setInterval(function():void {
prnt.x = 50+40*Math.cos(n);
prnt.y = 50+40*Math.sin(n);
prnt.scaleX = 3*Math.sin(n);
prnt.rotation += 7*Math.cos(n);
n += 0.1;
}, 100);
addChild(prnt);
}
}
}
Посмотри в действии .