2008-12-03 28 views
1

如何在Flash/AS3中獲取/設置MovieClip的絕對位置?絕對而言,我的意思是相對於舞臺的起源。Flash/AS3;獲取/設置MovieClip的絕對位置?

我目前有此setter:

class MyMovieClip extends MovieClip 
{ 
    function set xAbs(var x:Number):void 
    { 
    this.x = -(this.parent.localToGlobal(new Point()).x) + x; 
    } 
} 

這似乎是工作,但我有一種感覺它要求舞臺靠左對齊。

但是,我沒有一個工作的獲得者。這是行不通的:

public function get xAbs():Number 
{ 
    return -(this.parent.localToGlobal(new Point()).x) + this.x; // Doesn't work 
}  

我的目標是解決方案的工作,並與所有Stage對齊,但它很棘手。我在舞臺上使用這個相對於瀏覽器的窗口大小。

編輯:這適用於左上對齊的階段;不知道別人:

public function get AbsX():Number 
{ 
    return this.localToGlobal(new Point(0, 0)).x; 
}  
public function get AbsY():Number 
{ 
    return this.localToGlobal(new Point(0, 0)).y; 
}  
public function set AbsX(x:Number):void 
{ 
    this.x = x - this.parent.localToGlobal(new Point(0, 0)).x; 
} 
public function set AbsY(y:Number):void 
{ 
    this.y = y - this.parent.localToGlobal(new Point(0, 0)).y; 
} 

回答

9

兩件事情:

爲什麼substractions?

var x=this.parent.localToGlobal(new Point(this.x,0)).x; 

應該給出正確的結果。如果父剪輯縮放,您的計算將由比例因子關閉...

只是在黑暗中拍攝,但您可以添加一個globalToLocal(this.stage)補償對齊問題?

+0

二傳手怎麼樣? – bzlm 2008-12-04 09:44:27

2

同意moritzstefaner,你不需要減法階段,但是對於你的二傳手,我實際上認爲你應該使用globalToLocal,並使用localToGlobal你的getter。這些將負責縮放和旋轉以及位置。

+0

你能提供一個代碼示例嗎? – bzlm 2008-12-04 09:43:43

0

我不能使用localToGlobal這樣的替代解決方案是得到你想要的範圍內鼠標的位置:

mynestesprite.addEventListener (MouseEvent.MOUSE_OVER, myover) 
function myover(e:MouseEvent){ 
    // e.target.parent.parent .... 
    trace (e.target.parent.parent.mouseX, e.target.parent.parent.mouseY) 
} 
4

THANK YOU SO MUCH !!!!

TO GET OBJECT RELATVE的位置,以一階段使用:

  • (對象的DisplayObject).localToGlobal(新點())×;
  • (object as DisplayObject).localToGlobal(new Point())。y;
+0

謝謝,也適用於flex 4 – ufk 2010-07-26 10:57:52