显示对象的 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
中的localX
和localY
就可以了。
编辑: 要获取本地坐标,您可以尝试使用 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 将有两个属性,称为 mouseX
和 mouseY
,其中包含鼠标的本地坐标。
如果您在矩形内绘制图形偏移,坐标系将不会考虑这一点,最好将整个矩形偏移。
* 假设您的 Rectangle 类是 DisplayObject 的子类,我假设您已经将它放在了舞台上。
【讨论】:
当我调用 rect.mouseX 和 rect.mouseY 时,我得到的坐标与舞台的 mouseX 和 mouseY 相同 我的意思是,如果我在舞台中间添加矩形,所以它不在 X=0,Y=0 处,这将返回相同的坐标,它们仍然是相同的。以上是关于显示对象的 ActionScript 本地 X 和 Y 坐标?的主要内容,如果未能解决你的问题,请参考以下文章
Actionscript:在 iOS 上创建文本字段和填充的性能
Flash内的搜索框,从本地xml读取数据(actionscript)