Вы запутались в двух разных моментах, но я думаю, что каждый из них проистекает из неполного представления о том, как Flash работает с системами координат. Напомним, что каждый экранный объект имеет свою собственную систему координат. В вашем первом вопросе свойства «x» и «y» объекта не рассчитываются динамически, чтобы отразить верхний левый угол объекта, они просто обозначают местоположение источника этого объекта относительно системы координат его родителя. Таким образом, значение "x" объекта не изменится только потому, что изменилось содержимое объекта - оно меняется при перемещении самого объекта.
Проблема с вашими координатами сцены заключается в том, что метод localToGlobal
преобразует координаты из области, в которой он вызывается, - и вы вызываете ее из родительского элемента прямоугольников, но вы передаете координаты из локальной системы. внутри прямоугольника. Обратите внимание на следующее, и оно должно иметь смысл:
function click(e:MouseEvent):void {
// bad - uses rectangle coords in scope of "this"
//trace(e.localX, e.localY, localToGlobal(new Point(e.localX, e.localY)));
// works - call localToGlobal from the scope of the rectangle
trace( e.target.localToGlobal(new Point(e.localX, e.localY)));
// alternately, call it from any scope with coordinates taken from that scope:
trace( localToGlobal( new Point( mouseX, mouseY )));
trace( e.target.localToGlobal( new Point( e.target.mouseX, e.target.mouseY )));
}
Обновление:
Частично это сбивает с толку то, как в AS3 работает всплытие событий. Прочтите первые несколько абзацев этой превосходной статьи , чтобы получить общее представление, а затем поймите, что в этом примере события изначально генерируются из прямоугольника (потому что именно там находится график, по которому щелкнули), но ловите их только тогда, когда они выходят за пределы области, в которой вы устанавливаете слушателя. Так что e.target
это прямоугольник, а e.currentTarget
это область вашего слушателя. Тогда последний кусочек головоломки - понять, что e.localX
и e.localY
всегда находятся в системе координат исходной цели события. (Это потому, что они являются свойствами события, и для них не имеет смысла продолжать изменяться, когда событие всплывает в списке отображения.)
В заключение: если вам интересно, как новички обычно справляются с этим, ответ заключается в том, что люди обычно прикрепляют слушателей непосредственно к экранному объекту с графическим содержимым, по которому будет щелкать. В этом случае e.target и e.currentTarget всегда будут одинаковыми, и большинству начинающих не нужно ничего понимать.