如何在Flash / AS3中获取/设置MovieClip的绝对位置?绝对地,我指的是它相对于舞台的起源的位置。
我目前有这个二传手:
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;
}
答案 0 :(得分:9)
两件事:
为什么要进行减法?
var x=this.parent.localToGlobal(new Point(this.x,0)).x;
应该已经给出了正确的结果。如果缩放父剪辑,则缩放因子将使您的计算失效...
只是在黑暗中拍摄,但您可以添加globalToLocal(this.stage)
来补偿对齐问题?
答案 1 :(得分:5)
非常感谢!!!!
获得对象的位置与舞台使用相关:
答案 2 :(得分:2)
同意moritzstefaner你不需要减法阶段,但是对于你的setter我实际上认为你应该使用globalToLocal,并使用localToGlobal作为你的getter。这些将负责缩放和旋转以及位置。
答案 3 :(得分: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)
}