Лого Флэша Потрошителя
 
Новости · Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Идеальный клип · Что делать  
Модель событий Flash MX
20.07.2002 24.09.2002

Одна из моих любимых особенностей Flash MX — новая модель событий, она просто делает жизнь настолько легче, а процесс написания кода — увлекательнее и настолько организованнее.. Если вы мало знали о модели событий — сейчас самое время понять, как много вы теряете, но, несомненно, Вы уже используете ее, даже не осознавая этого. Эта статья, будем надеяться, поможет каждому читателю понять модель событий flash и эффективно ее использовать, независимо от того, начинающий вы или уже супер flash-программер. Я считаю, что сравнение предмета с чем-то, имеющим отношение к человеку в его повседневной жизни — это лучший способ объяснить что-то новое так, чтобы человек это усвоил; нужна Реальная Аналогия с миром, так что эта статья использует аналогии, чтобы объяснить некоторые понятия..

Что вам нужно знать:

Чтобы понять объяснения и термины, используемые в этой статье, вам нужно знать определенные вещи о flash: во-первых, нужно понимать, что flash сегодня — Объектно-ориентированный и, следовательно, вы должны уже понимать основы объектно-ориентированного программирования в Flash; если вы можете ответить на следующие — можете продолжить чтение этой статьи и, скорее всего, вам все будет понятно, в противном случае следует посетить этот отличный сайт, дающий глубокое объяснение объектно-ориентированного программирования во flash:
Роберт Дебройль

Что такое объект?
Что такое метод?
Что такое свойство?
Что такое встроенные объекты Flash?
Какова разница между функцией и методом?
Какова разница между переменной и свойством?

Модель событий:

Многие из нас хотят знать, что происходит в мире или в нашей местности, — и мы просматриваем газеты, телевизор или Сеть, чтобы быть в курсе событий. Новости состоят из набора "событий", происходящих время от времени и называющихся "событиями", потому что они являются важными моментами во времени, о которых хотели бы узнать другие люди или им нужно было бы об этом узнать.

Воспринимайте модель событий во Flash как новостную ленту, это и есть тот способ, с помощью которого Flash Player сообщает нам о происхождении чего-то важного в клипе; конечно, эти новости не так важны, как реальные события из жизни, но они могут быть очень важными для скрипта.

Таким образом, в терминах Actionscript модель событий — это внутренняя работа Flash Player'а, направленная на то, чтобы оповещать флэш-клип, когда происходит что-то важное.

Событие:

Лента.ру рассылает репортеров для поиска важных новостей. Когда в мире что-то происходит, например, извержение вулкана, обозначаемое как событие, значит, люди возможно захотят узнать об этом, так что репортер, увидевший извержение вулкана, быстренько звонит в головной офис и сообщает, что нужно добавить эту последнюю горячую новость в новостной бюллетень, короче говоря, свежая новость потом распространяется по миру, чтобы любой мог увидеть ее по ТВ, прочитать в сети или услышать по радио и т.п..

То же самое, только в меньшем масштабе, происходит во флэш-клипе. Флэш-проигрыватель имеет собственных репортеров, и, например, когда пользователь двигает мышь, репортер, заметивший движение мыши, быстренько звонит в головной офис  — Флэш Проигрыватель  — и просит добавить последнюю новость в бюллетень новостей, потому что репортер знает, что это может быть интересно объектам, содержащимся в клипе. И очень быстро, за миллисекунды, последнее "событие" оглашается на весь клип.

Итак, в терминологии ActionScript, событие — это сообщение, возникающее в ответ на некое действие или изменение состояния; например, нажатие клавиши, перемещение мышки или окончание загрузки XML-документа.

Обработчик События:

Новостная лента флэш-проигрывателя делится с нами новостями таким образом, что мы можем действовать, в том смысле, что мы можем выполнить некий код, когда нам сообщат, что событие произошло. Мы просто ждем некоторое событие, и когда оно происходит, предпринимаем ответные действия. Вот здесь и вступаю в игру Обработчики Событий Flash MX.

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

Пользуясь понятиями AS можно сказать, что обработчик события — это просто свойство какого-либо определенного пользователем объекта, содержащее ссылку на метод AS. Этот метод вызывается и код внутри него выполняется, когда происходит соответствующее событие.

Категории Событий:

Новостная лента FP разбита на два разных отдела, которые работают с разными событиями. Они известны как объекты, любой встроенный AS объект типа Key, Mouse или Movieclip имеет своих репортеров, имеющих большой опыт в наблюдении событий, важных для соответствующего объекта. Например, репортер объекта Mouse занят только оповещением головного офиса Mouse, когда левая клавиша мышки была нажата, когда — отпущена, а когда мышка двигалась. Когда происходит одно из этих событий, репортер сообщает о нем в головной офис Mouse, который сразу после этого распространяет событие через новостную ленту.

Список событий, за которым обязаны наблюдать репортеры разных отделов, имеется в словаре скрипта ActionScript dictionary.

Вот список некоторых наиболее часто происходящих событий и связанных с ними обработчиков:

Описание События / Обработчик События

Движение мыши/onMouseMove
Левая кнопка мыши нажата/onMouseDown
Левая кнопка мыши отпущена/onMouseUp
Клавиша нажата/onKeyDown
Клавиша отпущена/onKeyUp

Итак, выражаясь языком AS, каждый из Встроенных Объектов, таких как Mouse, Key и Movieclip имеет свой набор относящихся к нему событий. Нет смысла объекту Key содержать события, относящиеся к объекту Mouse..

Слушатели (Listeners):

Слушатели — это определенные пользователем AS объекты, зарегистрированные в особых отделах бюллетеня новостей флэш-проигрывателя, потому что они заинтересованы в новостях, распространяемых этими отделами. Если объект зарегистрирован как заинтересованный в одном из отделов ленты новостей, то при происхождении события, относящегося к этому отделу ленты новостей, новостной бюллетень рассылается, и заинтересованные объекты получают его.

В терминах AS, Слушатель — это объект, содержащий обработчики событий, этот объект регистрируется в особом встроенном объекте и таким образом может получать события, относящиеся к тому объекту.

Использование Методов Слушателей (Listener Methods):

Есть методы, позволяющие нам регистрировать наши интересы или отказываться от их регистрации в рассылках новостей от новостных отделов. Чтобы зарегистрировать объект как заинтересованный в отделе новостей, мы используем метод addListener, а чтобы аннулировать регистрацию интересов объекта в отделе новостей, мы используем метод removeListener. Приведем процесс, через который мы должны пройти, чтобы зарегистрировать наши интересы в получении рассылки новостей от отделов новостных бюллетеней, в этом примере наш объект заинтересован в рассылке от объекта Mouse:

//создаем новый пустой объект
myobject=new Object()
//регистрируем наш интерес в рассылке объекта Mouse
Mouse.addListener(myobject);

А вот что нужно сделать для отмены регистрации нашего объекта в рассылке от Mouse:

Mouse.removeListener(myobject);

Говоря языком AS, теперь, когда бы ни произошло событие Мыши, объект с именем "myobject" будет оповещен о том, что произошло событие Мыши и о том, какое именно это событие.

Добавление обработчиков событий к объектам:

Мы должны сообщить пустому созданному нами объекту с именем "myobject" что делать при осуществлении определенного события, о котором он узнает из новостей от новостного отдела объекта Mouse, и, как вы понимаете, мы должны определить обработчики события для объектов. Для определения обработчика события, который будет выводить слова "Мыша двинулась (в AS смысле:)" в окно "Output" каждый раз при движении мыши, мы используем обработчик событий onMouseMove, как показано далее:

//создаем новый пустой объект
myobject=new Object();
//регистрируем наш интерес в рассылке новостей от объекта Mouse
Mouse.addListener(myobject);
//определяем для нашего объекта обработчик события onMouseMove
myobject.onMouseMove=function(){
trace("Мыша двинулась (в AS смысле:)");
}

Давайте будем умными и при нажатии клавиши выведем слова "Клавиша нажата" в окно "output" путем регистрации интереса нашего объекта в рассылке новостей от новостного отдела Key; используем для этого обработчик события onKeyDown:

//создаем новый пустой объект
myobject=new Object();
//регистрируем наш интерес в рассылке от Mouse
Mouse.addListener(myobject);
//определяем для нашего объекта обработчик события onMouseMove
myobject.onMouseMove=function(){
trace("Мыша двинулась (в AS смысле:)");
}
//а теперь регистрируем наш интерес в рассылке от объекта Key
Key.addListener(myobject)
//определяем обработчик события onKeyDown для нашего объекта
myobject.onKeyDown=function(){
trace("Клавиша нажата");
}

Давайте объясним с точки зрения AS, что происходит, когда пользователь нажимает на кнопку мыши. Когда бы он ни нажал, объект Mouse сообщает объекту с именем myobject, что произошло событие onMouseEvent, и затем запускается обработчик события, который в свою очередь выполняет код, выводящий слова "Мыша двинулась (в AS смысле:)" в окно "Output".

Мувиклипы (Movieclip) и Кнопки (Button) слушают автоматически:

Как было упомянуто выше, чтобы объект получил уведомление о событии, он должен быть зарегистрирован во встроенном объекте ActionScript, обеспечивающем связь с этим событием. Начиная с Flash 5, Мувиклипы являются объектами-наследниками класса Movieclip, а сейчас, в Flash MX, Кнопки таким же образом наследуют класс Button. Все экземпляры класса Movieclip автоматически зарегистрированы как заинтересованные в рассылке новостей от Movieclip, и все экземпляры класса Button автоматически зарегистрированы как заинтересованные в рассылке новостей от Button. Это означает, что вам не нужно явным образом использовать метод addListener для того, чтобы мувиклип был оповещен о каком-либо событии, связанном с Movieclip, то же самое верно и для Кнопок. Благодаря этому возможно следующее:

//создаем новый мувиклип на таймлайне _root
_root.createEmptyMovieClip(“mymovieclip”,1)
//определяем обработчик события "onMouseMove" для нашего мувиклипа
_root.mymovieclip.onMouseMove=function(){
//двигаем этот мувиклип за мышкой
this._x=_root._xmouse;
this._y=_root._ymouse;
}

Итак, объясним языком AS, что происходит, когда пользователь двигает мышь. Когда бы он ни сделал это, Movieclip объект с именем "mymovieclip" оповещается о том, что произошло событие мыши, и запускается обработчик события onMouseMove, который в свою очередь выполняет код, перемещающий мувиклип в позицию мышки.

Все мувиклипы автоматически получают сообщения от Key, Stage и Mouse.

Модель событий Flash 5:

Во Flash 5 была введена базовая модель событий для мувиклипов и кнопок, отсюда произошел обработчик событий "onClipEvent". Вы помните, как в последнем примере мы заставили мувиклип двигаться за мышкой, когда она сама двигалась, а теперь давайте посмотрим, что нам нужно было бы сделать, чтобы достичь того же результата, используя старую модель событий Flash 5; нам нужно было бы поместить следующий код вне мувиклипа, который мы хотим двигать:

onClipEvent(mouseMove){
this._x=_root._xmouse;
this._y=_root._ymouse;
}

Или если бы мы хотели выполнить некий код при нажатии кнопки, мы должны были бы поместить следующий код вне кнопки:

on(press){
trace("Мою кнопку кто-то нажал");
}

Вышеприведенный код может быть написан во Flash MX с использованием новой модели событий, например так:

Yourbutton.onPress=function(){
trace("Кто нажимал на мою кнопку?!?");
}

Вы можете продолжать использовать старую модель событий Flash 5 при программировании в Flash MX в целях обратной совместимости, это не запрещено официально Macromedia, но имхо вы должны осознавать, что происходит на самом деле, и что вы теряете. Нет абсолютно никаких преимуществ в использовании старой модели событий.

Flem в Flash MX больше не нужен:

Branden Hall создал модель событий в форме ActionScript extension, называемого "Flem" в самом начале существования Flash 5. Она предоставляла вам те же возможности, которые сейчас предоставляет встроенная модель событий Flash MX, использование этой библиотеки теперь не актуально.

Преимущества использования новой модели событий:

Первое, что вы получаете при использовании модели событий Flash MX как оппонента старой модели событий — это возможность изменять обработчики событий в любой момент времени, изменяя функцию, выполняющуюся в ответ на событие. Также в силу того, что теперь обработчик события является просто свойством объекта, он также может быть удален, что экономит ресурсы процессора, что было невозможно во Flash 5 без изобретения массы ненужных трюков и ухищрений. Теперь можно сосредоточиться на главном. В Flash 5 вы не могли присоединить мувиклип из библиотеки, используя метод attachMovie, а затем повесить на этот мувиклип обработчик события, потому что обработчик событий onClipEvent() должен был быть определен на мувиклипе еще в процессе разработки, но не в ходе выполнения скрипта. Теперь очень просто сделать это в Flash MX. Наконец, новая модель событий Flash MX намного яснее, легче в использовании и организованнее, чем старая модель событий, предлагаемая во Flash 5.

[новое окно]>

Дэдлайн

 

Примечания:
Эпохальный труд Роберта Дебройля стоит перечитывать регулярно.

Статус документа
: публикация
>>> Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Что делатьНаверх
  © Разработка: Ростислав Сирык · О проекте "Флэш Потрошитель" · Архивы сайта
Flash MX

Стандарты Actionscript

Внутренняя архитектура Actionscript

Атрибуты тэгов OBJECT и EMBED

Метод LoadVars.decode

Свойство Stage.showMenu

System.security.allowDomain

System.showSettings

Динамическое присоединение компонентов

onKeyDown против onClipEvent(keyDown)

Модель событий Flash MX

ASBroadcaster — ядро модели событий Flash MX

Чтение ID3-тэгов из файла .mp3

ASSetPropFlags — функция защиты свойств объектов

Объект Local SharedObject

Удаление Local SharedObject

Глобальный путь к классам

Level против root

Dreamweaver

Создаем расширение для Dreamweaver MX

Настройка Dreamweaver MX

Длинное тире, короткое тире, дефис. Правописание и Dreamweaver

Illustrator

Растеризация текста
FlexiPedia