AS3 - Как найти положение объекта относительно сцены?

Если у меня есть прямоугольник на сцене, как мне найти его верхний левый наконечник (x, y) и правый правый конец (x, y) относительно сцены? Странно, как я не могу найти это на google!

Ответы

Ответ 1

localToGlobal(point) of DisplayObject Преобразует точечный объект из координаты экранного объекта (локального) в координаты Stage (global).

// assuming (0, 0) is top left
var topLeftStage:Point = myDisplayObject.localToGlobal(new Point(0, 0));

// bottom right
var bottomRightStage:Point = myDisplayObject.localToGlobal(new Point(width, height));

Ответ 2

Вы можете сделать это в одной строке, например. если контейнер, к которому вы добавили его, также является DisplayObject, вы можете написать:

var rect:Rectangle = yourDisplayObject.getBounds(stage);

Это приведет к прямому доступу к прямоугольнику относительно сцены. Затем вы можете получить доступ к указанным вами значениям:

rect.bottomRight
rect.topLeft

Ответ 3

Если ваш объект находится в контейнере один, вы можете просто вычесть позицию контейнера из позиции объектов.

var rawx:Number = x - parent.x;
var rawy:Number = y - parent.y;

Повторно используйте localToGlobal(), как указано выше.


Найти верхние левые и нижние правые точки объекта легко, но вам нужно знать, где находится точка регистрации символа.

Если точка регистрации находится в центре символа:

var left:Number = x - (width / 2);
var right:Number = x + (width / 2);
var top:Number = y - (height / 2);
var bottom:Number = y + (height / 2);

Если он находится в верхнем левом углу:

var left:Number = x;
var right:Number = x + width;
var top:Number = y;
var bottom:Number = y + height;

Etc.

Ответ 4

если отображаемый объект не начинается с 0,0 мувиклипа, вам понадобится следующее:

var skin:DisplayObject = ... //the MC you need to get positions of
var point : Point = skin.localToGlobal(new Point(skin.getBounds(skin).x,skin.getBounds(skin).y));
var point2 : Point = skin.localToGlobal(new Point(skin.getBounds(skin).x+skin.getBounds(skin).width,skin.getBounds(skin).y+skin.getBounds(skin).height));

и результаты будут следующими:

x=point.x;
y=point.y;
width=point2.x-point.x;
heigth=point2.y-point.y;