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

Во Rash 5 использовалась модель событий, достаточно радикально отличающаяся от современных. Ее главная особенность заключается в том, что обработчики событий кнопок или клипов (а никаких других событий тогда и не было) должны быть связаны непосредственно с объектами.

Создать обработчик в виде метода объекта в коде кадра временной шкалы в данной модели невозможно. Если вы не работали во Flash 5 (или не учились по старым книжкам), то для вас, скорее всего, будет не ясно, как можно связать код обработчика непосредственно с клипом или кнопкой. Дело в том, что панель Actions является контекстно-зависимой: в ней отображается код того объекта, который выделен в данный момент. До сих пор мы встречались только со сценариями кадров, Но код могут содержать также клипы или кнопки.

Чтобы создать обработчик событий, используя модель Flash 5, необходимо:

1. Создать экземпляр клипа или кнопки, события которого будут отслеживаться, Для определенности «перетащим» из встроенной библиотеки любую кнопку и назовем ее but.

2. Выделить экземпляр и нажать . При этом откроется панель Actions. Обратите внимание на то, что будет написано в ее заголовке.

3.


Обработчики событий для клипов и кнопок создать при помощи особых конструкций — соответственно on и onCIipEvent. Их синтаксис (на примере обработчика для кнопок):

on (Event) {
statements
}

Здесь:

Event — идентификатор события, при наступлении которого должен выполниться код в обработчике. События Flash 5 имеют такое же название, как и современные их аналоги, с той разницей, что в их имени нет приставки «on». Так, событию onEnterFrame соответствует enter-Frame, onMouseMove — mouseMove и т. д.;

statements — код, который должен быть проделан при наступлении события. В основном он
задается по тем же правилам, что и в современных обработчиках-методах. Для примера «повесим» на нашу кнопку обработчик, который будет увеличивать ее на 10 % при ее нажатии:

on (release) {
but._xscale = but._yscale += 10;
}

Пример сценария клипа:
// Создайте клип и разместите на нем следующий код
onCIipEvent (mouseMove) {
this._xscale = this._yscale += 1; // При движении мыши клип увеличивается
}

Начиная с Flash MX, клипы могут использоваться как кнопки.


Соответственно их сценарии могут содержать как обработчики onClipEvent(event), так и on(event). Клип, имеющий обработчик «кнопочного» события, начинает вести себя, как кнопка. Например, при наведении на него указателя мыши форма последнего меняется со стрелки на руку. Наоборот, в сценариях кнопок могут быть только обработчики on(event).

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

При этом в Output появится сообщение: Statement must appear within on (onCIipEvent) handler
(Предложение должно применяться внутри обработчика on (onCIipEvent)).

Описание особенностей модели событий Flash 5 может занять с добрый десяток страниц — столько в ней разнообразных тонкостей. Однако приводить его мы не станем. Почему? Потому что мы просто не будем использовать старую модель событий, не имеющую абсолютно никаких преимуществ перед новой. Количество же ее недостатков огромно. Перечислим основные из них:

• Обработчики в стиле Flash 5 могут быть созданы, естественно, только для клипов и кнопок.


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

• Из-за того, что во Flash 5 обработчики событий должны были помешаться на клипы и кнопки, код сценария разрывался на многочисленные фрагменты.

По этой причине отладка фильмов (а тем более изучение чужих исходников) превращалась в адский труд. Мало того, что, для того чтобы найти все фрагменты кода, приходилось пересматривать все клипы и кнопки, так потом нужно было мысленно сложить из многих разрозненных кусочков единую картину сценария. А это зачастую было невероятно сложно!
Новая модель событий позволяет централизовать код. Это означает, что сценарий любого сколь угодно сложного фильма может быть создан на одном кадре. Именно к этому вы должны стремиться, если хотите стать хорошим Flash-программистом. Увы, среди флешеров низкой и средней подготовки распространена дурная привычка распределять код повременной диаграмме, клипам и кнопкам. Разобраться потом в таком фильме достаточно непросто. Поэтому нужно четко усвоить принцип: «Весь код на одном кадре». Исключение представляют только фильмы с прелоадерами — в них допустимы два кадра с кодом.

• Из-за того, что обработчики событий распределяются по разным объектам, становится весьма сложным понять, как же они будут взаимодействовать между собой и со скриптом на временной диаграмме.


Отсюда — сбои и трудности в отладке.

• Во Flash 5 не было возможности создать экземпляр клипа динамически при помощи метода attachMovie() или duplicateMovieClip(), а затем «повесить» на него обработчик события. Это существенно усложняло написание сценариев, заставляло придумывать хитроумные, требующие дополнительных вычислительных ресурсов методы. Используя новую модель событий, вы можете решить эту задачу с легкостью.

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

• Во Flash 5 невозможно обеспечить наследование обработчика событий, а также «научить» объекты одного класса слушать события другого.

• При использовании модели событий Flash 5 для клипов и кнопок недоступны такие полезные события, как onSetFocus и onKillFocus.

Тот факт, что концепция событий Flash 5 на редкость неудачна, стал очевидным уже в первые дни выхода этой версии программы.


Попытку исправить ее предпринял один из самых значительных ActionScript-программистов Питер Холл (Piter Hail). Он создал библиотеку FLEM, которая моделировала те же возможности, которые сейчас предоставляет новая модель событий. Данная библиотека получила широкое распространение, и, вполне вероятно, ее существование оказало определенное влияние на внесенные во Flash MX изменения.

Вы можете спросить: зачем нужно изучать модель событий Flash 5, если она не имеет никаких преимуществ перед современной моделью? Во-первых, огромное число интереснейших исходников в сети выполнены во Flash 5. Во-вторых (к сожалению), многие пользователи, даже переходя на Flash MX и Flash MX 2004, продолжают работать в стиле Flash 5. Почему? Тут сказывается и консервативность, и недостаток (в нашей стране) серьезной литературы, и банальная лень переучиваться. Чтобы суметь разобраться в коде таких пользователей, вы должны иметь представление о старой модели событий. В-третьих, до самого недавнего времени большинство заказчиков требовало выполнять проекты в стиле Flash 5, так как считалось, что Flash Player 6 и, тем более, Flash Player 7 не установлен у значительной части пользователей (что, кстати, не соответствует действительности).

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Модель событий Генератор—Листенеры
Обновление экрана при событиях
Событийные методы
Ядром модели событий Генератор – Листенеры Flash MX 2004

Вернуться в раздел: Action Script / 8. События