1

我正在尝试将父容器的坐标转换为全局舞台坐标。这是对象和容器:

 imgSprite.addChild(imgInstance); //imgInstance is imported from class
 imageContainer.addChild(last); 
 imageContainer.addChild(imgSprite); // imgSprite and last are to be replaced 

基本上,我想在imageContainer.

我应用了该localToGlobal()功能,但没有任何效果。我做错了什么?

这是我替换它们的功能。注意:此代码属于 class main,容器的父级是 stage ,并且 eachimgSprite只是添加imgContainer和移动 via obj.xobj.y(不在代码中)。

function click(e:MouseEvent):void {     
    var p1:Point = e.currentTarget.localToGlobal(newPoint(e.currentTarget.x, e.currentTarget.y));
    var p2:Point = last.localToGlobal(new Point(last.x, last.y));
    e.currentTarget.x = globalToLocal(p2).x; 
    e.currentTarget.y = globalToLocal(p2).y;
    last.x = globalToLocal(p1).x;
    last.y = globalToLocal(p1).y;
}

据我了解,每个对象都有本地和全局位置。因此,在这里我将本地位置转换为全局位置,然后当将另一个对象移动到该位置时,我再次将其转换为本地位置,因为它们属于同一个父级,它应该导致匹配的坐标,但是我的图像开始四处乱飞在各个方向,我开始拉我的头发。

4

1 回答 1

0
var p2:Point = last.localToGlobal(new Point(last.x, last.y));

应该

var p2:Point = last.localToGlobal(new Point(0, 0));

内的Point参数localToGlobal()DisplayObject您要全球化的点。因此,如果last位于其父容器内的 (50,50) 处,则您的代码实际上是在请求 (50,50) 内的全局坐标last。在这种情况下,(0,0)( last.x, last.y)。

于 2012-12-19T16:08:31.430 回答