显示对象的 ActionScript 本地 X 和 Y 坐标?

Posted

技术标签:

【中文标题】显示对象的 ActionScript 本地 X 和 Y 坐标?【英文标题】:ActionScript Local X And Y Coordinates Of Display Object? 【发布时间】:2011-02-24 14:24:29 【问题描述】:

我正在尝试从精灵中追踪 x 和 y 坐标。我在舞台上添加了一个矩形:

var rect:Rectangle = new Rectangle(10, 10, 200, 200);
addChild(rect);
rect.x = rect.y = 100;

向矩形添加 Mouse_Move 事件,我可以在移动矩形时跟踪 mouseX 和 mouseY 以接收舞台的坐标,但是如何获取本地 x 和 y 坐标?所以如果我将鼠标悬停在矩形精灵的最左上角,mouseX 和 mouseY 返回 10 作为全局坐标,但我如何让它返回 0 和精灵的局部坐标?

我假设 localX 和 localY 是我正在寻找的,但这不起作用:

function mouseOverTraceCoords(evt:MouseEvent):void

trace(mouseX, mouseY, evt.localX, evt.localY);

【问题讨论】:

【参考方案1】:

这取决于您如何设计 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 移动,所以MouseEvent 中的localXlocalY 就可以了。

编辑: 要获取本地坐标,您可以尝试使用 getBounds :

function mouseOverTraceCoords(evt:MouseEvent):void 
 var dob:DisplayObject = DisplayObject(evt.target);
 var bnds:flash.geom.Rectangle = getBounds(dob.parent);
 var localX:Number=e.localX - bnds.x + dob.x;
 var localY:Number=e.localY - bnds.y + dob.y;

 trace(mouseX, mouseY, evt.localX, evt.localY, localX, localY);

【讨论】:

它的设计与您的第一个示例相同。那么我怎样才能从中接收本地坐标呢?矩形精灵是可拖动的,这就是为什么我不能像你的第二个例子那样分配它的位置。 @TheDarkIn1978 好的,我已经编辑了我的答案,看看它是否适用于您的应用。 谢谢。结果比我预期的要容易得多。我只需从 getRect(this).x 中减去 evt.localX 即可接收本地坐标。我花了很长时间才解决这个问题。【参考方案2】:

看看globalToLocal

【讨论】:

【参考方案3】:

根本不需要进行任何转换 *,您的 Rectangle 将有两个属性,称为 mouseXmouseY,其中包含鼠标的本地坐标。

如果您在矩形内绘制图形偏移,坐标系将不会考虑这一点,最好将整个矩形偏移。

* 假设您的 Rectangle 类是 DisplayObject 的子类,我假设您已经将它放在了舞台上。

【讨论】:

当我调用 rect.mouseX 和 rect.mouseY 时,我得到的坐标与舞台的 mouseX 和 mouseY 相同 我的意思是,如果我在舞台中间添加矩形,所以它不在 X=0,Y=0 处,这将返回相同的坐标,它们仍然是相同的。

以上是关于显示对象的 ActionScript 本地 X 和 Y 坐标?的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript:在 iOS 上创建文本字段和填充的性能

ActionScript 3 从显示对象中删除所有子项

ActionScript 3 在网格布局中定位显示对象

Flash内的搜索框,从本地xml读取数据(actionscript)

ActionScript 3 实例化一个对象并将其添加到显示列表并一次性给它一个名称

Actionscript:如何创建一个计数器来注册一个 hitTestObject 并在主舞台上显示分数?