我正在尝试从精灵中追踪x和y坐标。我在舞台上添加了一个矩形:
var rect:Rectangle = new Rectangle(10, 10, 200, 200);
addChild(rect);
rect.x = rect.y = 100;
将一个Mouse_Move事件添加到rect中,我可以跟踪mouseX和mouseY以在rect上移动时接收舞台的坐标,但是如何获得本地x和y坐标?因此,如果我将鼠标放在rect精灵的最左上方,则mouseX和mouseY将返回10作为全局坐标,但是如何让它返回0和精灵的本地坐标?
我认为localX和localY是我想要的,但这不起作用:
function mouseOverTraceCoords(evt:MouseEvent):void
{
trace(mouseX, mouseY, evt.localX, evt.localY);
}
答案 0 :(得分:2)
答案 1 :(得分:2)
这取决于你如何设计Rectangle类, 如果你做过这样的事情:
class Rect1 extends Sprite {
public function Rect1(x:Number, y:Number, width:Number, height:Number) {
var g:Graphics = graphics;
g.beginFill(0xff0000, 0.5);
g.drawRect(x, y, width, height);
g.endFill();
}
}
您的本地坐标位于0,0
,但您从x,y
开始绘制,因此当您获得localx, localY
时,您将获得x,y
而不是0,0
但如果你的课程被设计成类似的东西:
class Rect2 extends Sprite {
public function Rect2(x:Number, y:Number, width:Number, height:Number) {
var g:Graphics = graphics;
g.beginFill(0xff0000, 0.5);
g.drawRect(0, 0, width, height);
g.endFill();
this.x = x;
this.y = y;
}
}
然后您的绘图从0,0
开始,您的对象移动到x,y
,以便来自localX
的{{1}}和localY
一切正常。
修改强> 要获取本地坐标,您可以尝试使用getBounds:
MouseEvent
答案 2 :(得分:1)
根本不需要进行任何转换*,你的Rectangle将有两个名为mouseX
和mouseY
的属性,它们包含鼠标的本地坐标。
如果您在矩形内绘制图形偏移量,坐标系统将不会考虑这一点,而是更好地将偏移整个矩形。
*假设你的Rectangle类是DisplayObject的子类,我假设你已经在舞台上了。