Руководство по actionscript. часть 4, стр. 053
Переменные localXnlocalY представляют позицию указателя мыши в координатном пространстве получателя события (то есть относительно левого верхнего угла получателя события). В то же время переменные stageX и stageY представляют позицию указателя мыши в координатном пространстве экземпляра класса Stage (то есть относительно левого верхнего угла экземпляра класса Stage).
В листинге 22.4 демонстрируется использование переменных localX, localY, stageX и stageY. Здесь мы создаем объект TextField, добавляем его непосредственно в экземпляр класса St age и затем размещаем его в позиции с координатами (100; 100). Когда пользователь щелкает кнопкой мыши на объекте TextField, мы выводим позицию указателя мыши относительно этого объекта (то есть получателя события) и относительно экземпляра класса Stage. Например, если пользователь щелкнет кнопкой мыши в точке, которая находится на 10 пикселов правее и 20 пикселов ниже левого верхнего угла объекта TextField, результат будет выглядеть следующим образом:
Position in TextField’s coordinate space: (10. 20) Position in Stage instance’s coordinate space: (110. 120)
Вот этот код:
Листинг 22.4. Определение позиции указателя мыши
package { import flash. display.*; import flash. events.*; import flash. text.*;
public class MousePositionChecker extends Sprite { public function MousePositionChecker ( ) { // Создаем объект TextField var textfield:TextField = new TextFieldC ); textfield. text = «Click here»: textfield. autoSize = TextFieldAutoSize. LEFT: textfield. x = 100; textfield. у = 100;
// Добавляем объект textfield в список отображения в качестве // непосредственного ребенка экземпляра класса Stage stage. addChi1d(textfield);
// Регистрируем приемник в объекте textfield // для событий щелчка кнопкой мыши
textfi eld. addEventLi stener(MouseEvent. CLICK. cli ckLi stener);
}
// Когда пользователь щелкает кнопкой мыши на объекте textfield. // отображаем позицию указателя мыши private function clickListener (e:MouseEvent):void { // Позиция указателя мыши относительно объекта TextField trace(«Position in TextField’s coordinate space: («
+ e. localX + «. » + e. localY + «)»); // Позиция указателя мыши относительно экземпляра класса Stage trace(«Position in Stage instance’s coordinate space: (» + e. stageX + «. » + e. stageY + «)»);
}
}
}
Обновляя позицию объекта в ответ на изменения позиции мыши, мы можем сделать так, чтобы этот объект следовал за мышью. В листинге 22.5 представлен код на языке ActionScript 3.0, реализующий пользовательский указатель мыши. В данном листинге применяются многие методики, с которыми мы познакомились на протяжении этой книги. В частности, код из листинга использует класс StageDetector, рассмотренный в подразд. «События ADDED_TO_STAGE и REMOVED_FROM_STAGE» разд. «События контейнеров» гл. 20. В листинге также применяются две методики, которые мы еще не рассматривали: преобразование координат и постсобытийные обновления экрана. Перекрестные ссылки на дополнительную информацию указаны в комментариях.