localToGlobal/globalToLocal AS3混乱

tar*_*ing 0 actionscript-3 coordinates

我想将显示对象从一个容器移动到另一个容器,但它显示在屏幕上的同一位置.

我以为我多年前就已经理解了,但以下不起作用:

function moveToNewContainer(obj:DisplayObject, newParent:DisplayObjectContainer):void {
    var pos:Point = new Point(obj.x, obj.y);
    var currentParent:DisplayObjectContainer = obj.parent;
    pos = currentParent.localToGlobal(pos);
    currentParent.removeChild(obj);
    newParent.addChild(obj);
    pos = newParent.globalToLocal(pos);
    obj.x = pos.x;
    obj.y = pos.y;
}
Run Code Online (Sandbox Code Playgroud)

这不会将对象放在我预期的相同位置.

有谁知道我做错了什么,拜托?

谢谢,詹姆斯

Aar*_*ron 7

使用localToGlobal/ globalToLocal和设置您显示的xy属性会计算对象在其新父级中的正确位置,但不会针对转换的其他方面进行调整,例如缩放或旋转.换句话说,对象的注册点确实将保持在同一位置,但对象可以不同地旋转,缩放或剪切.

你的问题的解决方案需要考虑transform.concatenatedMatrix旧父和新父的属性 - 你需要将对象的变换矩阵乘以1,然后乘以另一个的倒数,或沿着这些线的某些东西.如果您需要帮助来计算数学,请发表评论.