ActionScript Локальные X и Y координаты экранного объекта? - PullRequest
0 голосов
/ 27 мая 2010

Я пытаюсь отследить координаты 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);
}

Ответы [ 3 ]

2 голосов
/ 27 мая 2010

Зависит от того, как вы спроектировали свой класс 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 и localY из MouseEvent будут в порядке.

Edit: Чтобы получить локальную координату, вы можете попробовать использовать 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);
}
2 голосов
/ 27 мая 2010

взгляните на globalToLocal

1 голос
/ 27 мая 2010

Нет необходимости делать какие-либо преобразования *, у вашего Rectangle будет два свойства с именами mouseX и mouseY, которые содержат локальные координаты мыши.

Если вы рисуете графическое смещение внутри прямоугольника, система координат не учитывает это, лучше вместо этого сместить весь прямоугольник.

* при условии, что ваш класс Rectangle является подклассом DisplayObject, что я бы предположил, поскольку вы получили его на сцене.

...