2012-12-18 73 views
1

我想從父容器的座標轉換爲全局舞臺座標。這是對象和容器:使用localToGlobal切換圖像位置

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

基本上,我想在imageContainer切換兩個圖像的位置。

我應用了localToGlobal()函數,但沒有任何效果。我做錯了什麼?

這是我的功能,取代他們。注意:此代碼屬於main類,容器的父級爲stage,並且每個imgSprite僅被添加到imgContainer,並通過obj.x,obj.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; 
} 

據我所知,每個物體都有本地和全球的位置。所以,在這裏,我將一個本地位置轉換爲全局,然後再將另一個對象移動到這個位置時,我將它轉換爲本地,因爲它們屬於同一父級,所以它應該導致匹配座標,但是我的圖像開始飛行在各個方向,我開始拉我的頭髮。

回答

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

應該

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

localToGlobal()Point的說法是,要在全球化中DisplayObject點。因此,如果last位於其父容器中的(50,50)處,那麼您的代碼確實要求在last內的全局座標(50,50)。在這種情況下,(0,0)last.x,last.y)。