开发者

ActionScript Local X And Y Coordinates Of Display Object?

i'm trying to trace the x and y coordinates from within a sprite. i've added a rectangle to the stage:

var rect:Rectangle = new Rectan开发者_如何学编程gle(10, 10, 200, 200);
addChild(rect);
rect.x = rect.y = 100;

adding a Mouse_Move event to the rect, i can trace mouseX and mouseY to receive the coordinates of the stage while moving over the rect, but how do i get the local x and y coordinates? so if i mouse over the very top left of the rect sprite, the mouseX and mouseY return 10 as the global coordinates, but how do i make it return 0 and the local coordinates of the sprite?

i assumed localX and localY was what i was looking for, but this doesn't work:

function mouseOverTraceCoords(evt:MouseEvent):void
{
trace(mouseX, mouseY, evt.localX, evt.localY);
}


It depends how you have designed your Rectangle class, if you have done something like this:

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();
    }
}

your local coordinate will be at 0,0 but you drawing start at x,y so when you are getting the localx, localY you will obtain x,y and not 0,0.

But if your class is designed as something like that :

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;
    }
}

then your drawing start at 0,0 and your object is moved at x,y so the localX and localY from the MouseEvent will be ok.

Edit: To get the local coordinate you can try using 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);
}


take a look at globalToLocal


There's no need to do any transformations at all *, your Rectangle will have two properties called mouseX and mouseY which contain the local coordinates of the mouse.

If you're drawing your graphics offset within the rectangle, the coordinate system will not consider this, it's a better idea to offset the entire rectangle instead.

* assuming your Rectangle class is a subclass of DisplayObject, which I'd assume since you've got it on the stage.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜