2008-12-03 86 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