これを試すことができます。私の状況では機能しますが (スケール/x/y/回転プロパティを変更するだけの場合)、変換行列を使用すると正しく機能しない場合があります。
function changeParent(displayObj:DisplayObject, newParent:DisplayObjectContainer, depth:Number = -1, retainRelativeSize:Boolean = false):void {
var tmpParent:DisplayObjectContainer = displayObj.parent;
while (tmpParent) {
displayObj.scaleX *= tmpParent.scaleX;
displayObj.scaleY *= tmpParent.scaleY;
displayObj.rotation += tmpParent.rotation;
tmpParent = tmpParent.parent;
}
tmpParent = newParent;
while(tmpParent){
displayObj.scaleX = displayObj.scaleX / tmpParent.scaleX;
displayObj.scaleY = displayObj.scaleX / tmpParent.scaleY;
displayObj.rotation -= tmpParent.rotation;
tmpParent = tmpParent.parent;
}
var point1:Point= displayObj.localToGlobal(new Point());
var point2:Point = newParent.globalToLocal(point1);
if (depth >= 0) {
newParent.addChildAt(displayObj, depth);
}else {
newParent.addChild(displayObj);
}
displayObj.x = point2.x;
displayObj.y = point2.y;
}