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;