ActionScript — это язык сценариев, который позволяет разработчикам макси-мально реализовать
потенциал фильмов в формате Flash. В этом уроке вы познакомитесь с рядом простейших
объектов, применяемых в сценариях ActionScript, и узнаете о роли, которую играют
различные элементы этого языка в его структуре.
Если вы уже сталкивались с фильмами в формате Flash, то никак не могли обойтись без средств
языка ActionScript. Скажем, кнопки Stop (Остановка) и Play (Воспроизведение)
всегда связаны со сценариями ActionScript. Этот язык призван обслуживать потребности
Flash, и все команды ActionScript связаны с соответствующими объектами фильмов
Flash. В частности, команды Play и Stop соответственно обеспечивают воспроизведение
и остановку клипа или киноленты (timeline). В других языках сценариев и в большинстве
языков программирования упомянутые команды носят более общий характер и для
их надлежащей реализации может потребоваться дополнительная информация. При
использовании ActionScript в фильмах Flash команда Stop совершенно недвусмысленно
предписывает необходимость остановить воспроизведение фильма на текущем кадре.
Язык ActionScript настолько прост и универсален, что его можно использовать
как бы исподволь, незаметно для себя, — это коренным образом отличает его от
других языков сценариев и от языков программирования иного типа.
Познакомившись
в общих чертах с простейшими командами ActionScript, вы поневоле должны задаться
вопросом: «А что вообще можно сделать в формате Flash без сценариев ActionScript?»
Ответ: «Почти ничего (особенно если речь идет об интерактивных фильмах)».
Разумеется, даже большой фильм можно сделать исключительно пассивным, лишив
его обратной связи со зрителем. Но пассивные клипы хороши только для случайно
заглянувших на ваш сайт зевак: они готовы просто посмотреть ваш фильм от начала
до конца и им не придется к нему возвращаться.
Средства
ActionScript позволяют предусмотреть в клипе возможность для принятия пользователем
определенных решений, то есть сделать пользователя активным участником просмотра.
Вы включаете в сценарий ряд условий, пользователь выбирает одну из предоставленных
возможностей, а система воспроизведения Flash адекватно реагирует на его действия.
Вы можете, к примеру, ввести в фильм сценарий ActionScript, который позволит
пользователю сделать три попытки дать правильный ответ на поставленный вопрос.
После третьей неудачной попытки сценарий автоматически отправит пользователя
освежить память, перенося его к метке Refresher-Course, — здесь находится
кадр, содержащий информацию, относящуюся к текущему вопросу, Простейший механизм,
пригодный для реализации системы вопросов с несколькими попытками дать ответ,
— это цикл в кадре (frame loop), то есть последовательность команд сценария
ActionScript, в которой обеспечивается подсчет количества попыток, произведенных
пользователем. Когда максимальное число попыток исчерпано, пользователя следует
отправить к кадру с именем RefresherCourse.
Сходным образом,
если вы хотите создать «игровой автомат» (arcade), фильм Flash должен
будет быстро и четко реагировать на целый массив событий. Обычные старые фильмы
в формате Flash, в которых не применяются средства языка ActionScript, вообще
не способны реагировать на действия пользователя. Язык ActionScript дает возможность
проигрывателю Flash узнавать местонахождение указателя мыши и других объектов
на экране, а также устанавливать зависимости между действиями игрока и различными
объектами, определять оставшееся время и уровень подготовки игрока. При этом
система Flash может постоянно вести счет игры. Все эти задачи решаются средствами
ActionScript весьма эффективно.
Если вы создаете
фильмы главным образом для Web-страниц, сценарии Action-Script могут действовать
также в качестве посредников. Когда пользователь в ходе работы с фильмом вводит
какие-либо данные, они могут передаваться соответствующим Web-страницам и влиять
на поведение последних. Возможна и обратная картина, когда информация Web-страницы
передается фильму. Еще более важной является возможность получать с помощью
сценариев Action-Script ту или иную информацию и передавать ее непосредственно
серверу для сохранения и обработки в базе данных. Это обеспечит ваш Web-сайт
динамическим пользовательским интерфейсом на основе Flash. Пользователь сможет,
например, ввести в клипе свое имя, адрес и номер кредитной карточки; полученные
данные можно передать Web-серверу, отвечающему за обработку заказов.
Разработчики языков сценариев и языков программирования, как правило, бывают потрясены, когда узнают, что пользователи умудрились найти в том или ином языке больше возможностей, чем предусмотрено разработчиком. Язык ActionScript создавался прежде всего как средство, призванное обеспечить взаимодействие с пользователями фильмов в формате Flash; при этом конкретные виды и объем такого взаимодействия ограничены лишь рамками воображения автора.
В предыдущих версиях пакета ActionScript вся работа со сценариями была сосредоточена в небольшом окне, где необходимые операции выбирались в меню. На экране представлялся лишь небольшой фрагмент исходного текста, и создать в таких условиях мало-мальски интересный сценарий было задачей, мягко говоря, сложной. В версии Flash 5 язык ActionScript превратился в абсолютно самостоятельный объектно-ориентированный язык сценариев. Он во многом схож с JavaScript, но последовательное формирование сценария и данной системе осуществляется путем выбора мышью необходимых языковых конструкций. Предназначенный для опытных пользователей экспертный режим позволяет вручную вводить код, как в обычном текстовом редакторе; предусмотрены также механизмы автозавершения и выбора для вставки в текст сценария различных языковых конструкций: команд, функций, операторов и объектов — с помощью мыши. Окно редактора ActionScript, доступное через панели Object Actions (Операции объекта) и Frame Actions (Операции кадра), в обычном режиме помогает начинающим в изучении и применении языка ActionScript. Этот режим используют начинающие пользователи; опытные создатели фильмов, как правило, не прибегают к его услугам.
ActionScript
— модульный язык программирования. Это значит, что сценарии на этом языке являют
собой небольшие модули, которые выполняют строго определенные функции, например
остановку или воспроизведение клипа. Модули относительно автономны, однако ни
один из них не является независимым от всех прочих компонентов фильма. В общих
чертах ваша задача как автора фильмов сводится к тому, чтобы связать сценарии
ActionScript с соответствующими кнопками, клипами и кадрами; когда при воспроизведении
фильма пользователь щелкает на какой-то кнопке или просто наступает черед кадра
или клипа, с которым связан определенный сценарий ActionScript, этот сценарий
автоматически запускается. Это вовсе не значит, что сценарии ActionScript не
могут быть изощренными, сложными. Модульность языка предполагает лишь то, что
в большинстве случаев работа программиста над фильмом сводится к написанию небольших
по объему сценариев для кнопок, клипов и кадров.
С точки зрения
людей, которые не имеют опыта программирования, это просто замечательное свойство
языка. Возникает возможность изучать и применять большой и сложный язык обработки
сценариев по частям; для использования ActionScript в общем случае вовсе не
обязательно знать его в полном объеме. Средства языка ActionScript можно изучать
по мере необходимости. Когда у вас возникает желание расширить функциональность
фильма, вы просто «проходите» несколько новых разделов ActionScript
— и ваши клипы приобретают новые черты. В то же время изучить ActionScript для
опытного программиста означает выяснить, где и как следует использовать знакомые
по другим языкам операциональные конструкции и структуры данных, такие как условия,
массивы и циклы.
Приятным
сюрпризом для опытных программистов (и обстоятельством, чрезвычайно полезным
для повышения профессионального уровня прочих разработчиков) является тот факт,
что язык ActionScript построен на принципах объектно-ориентированного программирования
(ООП). Если не вдаваться в технические нюансы ООП (чтобы не прогневить ненароком
богов информатики), можно сказать, что сущность объектно-ориентированного подхода
состоит в интерпретации всех элементов программы как объектов. Сцена, кадр,
текстовый блок, рисунок, символ — все это объекты языка ActionScript. У объектов
имеются атрибуты (attributes), или свойства (properties), — поля,
значения которых могут изменяться сценариями; у каждого объекта есть уникальный
идентификатор (unique ID), который позволяет ссылаться на этот объект в
тексте сценариев ActionScript. Допустим, у вас есть клип с именем Cecil. У объекта
Cecil наличествует атрибут Rotation, позволяющий задать угол поворота данного
объекта. В этом случае сценарий ActionScript может «сообщить» объекту
Ceci 1 о необходимости повернуться на 90 градусов (табл. 1.1).
Таблица
1.1. Характеристика клипа
Объект |
Атрибут |
Уникальный
идентификатор |
Сценарий
ActionScript |
||
Клип |
Rotation |
Cecil |
"Повернуть
объект Cecil на 90 градусов" |
||
Объекты могут
образовать иерархическую структуру — любой объект может состоять из других объектов.
Например, клип может включать в себя графические символы, рисунки, кнопки и
даже другие клипы, находящиеся в разных слоях (layers). Некоторые из указанных
объектов в свою очередь могут состоять из других объектов. Рассмотрим следующую
структуру:
toothColor=new Col or(_root.1ion.teeth);
toothColor. setFUBC
0xFF9900);
Такое изменение
можно произвести в сценарии, обрабатывающем щелчок на какой-либо кнопке, в сценарии
определенного кадра, или клипа teeth, или другого клипа. Пока существует соответствующий
объект (как правило, клип), все прочие объекты, содержащие сценарии ActionScript,
могут направлять этому объекту различные команды. Однако во всех командах следует
указывать соответствующий путь; необходимо также соблюдать ряд других синтаксических
ограничений. В нашем случае иерархия объектов отражается в следующей форме:
root.lion.teeth
Сценарий
ActionScript вне зависимости от того, где он находится, может изменять данные
в любой иерархической структуре объектов. Сценарий может воздействовать как
на модель поведения того объекта, к которому он относится, так и на поведение
и свойства другого объекта. Скажем, у объекта клипа с именем child (ребенок),
находящегося на основной киноленте, может быть сценарий, отдающий объекту grandchild
(внук), представляющему другой клип, расположенный в иной иерархической структуре,
команду перейти к кадру 34 и воспроизвести его. При этом может быть также отдана
команда увеличить изображение кадра 34 в два раза. В свою очередь, кадр 34 также
может содержать сценарий, распоряжающийся объектами, которые принадлежат какому-то
третьему клипу.
Работать
со сценариями и объектами в иерархической структуре не так сложно, как это может
показаться. Средства ООП в системе Flash предоставляют в распоряжение разработчика
модульную архитектуру; программа состоит из коротких сценариев, относящихся
к отдельным кадрам, кнопкам и клипам; создать такой набор модулей проще, чем
написать одну большую программу длиной 29 876 строк. При создании фильма в формате
Flash как с помощью сценариев ActionScript, так и без таковых важно правильно
разбить данные на части и продумать способ применения механизма ключевых кадров.
Объектно-ориентированная среда требует также строгого планирования, которое
помогает эффективно разобрать фильм Flash на отдельные компоненты, реализуемые
средствами ActionScript. Таким образом, ActionScript можно охарактеризовать
как простейший, однако весьма эффективный язык объектно-ориентированного программирования,
позволяющий упростить работу над фильмами и сделать ее не такой утомительной.
Предельно
упрощая, можно считать, что сценарии ActionScript встраиваются в экземпляры
клипов, кнопок и кадров, однако следует иметь в виду, что на состояние этих
клипов, кнопок и кадров влияет множество самых разных условий. Перед написанием
сценария необходимо четко продумать те ситуации, связанные с различными клипами,
кнопками и кадрами, при которых этот сценарий будет использоваться в вашем фильме.
Клипы Flash
5 могут иметь собственные сценарии. В предыдущих версиях языка ActionScript
сценарии могли быть только у кнопок и кадров. Поскольку именно клипы (и только
они) являются теми объектами, свойства которых могут изменяться при изменении
сценариев, они в настоящее время являются наиболее важными объектами формата
Flash 5 и языка ActionScript. Вообще говоря, объекты могут также изменяться
при переходе к фрагментам киноленты, где кадрируемые (tweened) объекты находятся
в процессе трансформации
или обновляются в ключевом кадре. Однако только клипы располагают свойствами,
которые можно адресовать и изменять с помощью сценариев ActionScript. Для создания
клипа следует выполнить следующую последовательность шагов.
Рис.
1.1. В панели Instance можно ввести имя экземпляра клипа
Ваш клип
готов к работе. На рисунке представлены вновь созданный клип и панель Instance
(Экземпляр), играющая одну из ключевых ролей в организации работы сценариев.
Имя экземпляра, введенное в поле Name (Имя), фактически более важно, чем имя
символа, показанное над раскрывающимся списком Behavior (Модель поведения).
До выхода
Flash версии 5 кнопки были единственными символьными объектами, где могли размещаться
сценарии. И несмотря на то что в настоящее время клипам также можно назначать
сценарии ActionScript, кнопки по-прежнему играют в этом языке ключевую роль.
Пользователям фильмов Flash хорошо известно, что символ кнопки внешне может
вообще мало походить на кнопку. Символ кнопки может быть частью большого графического
изображения, спокойно ожидающей «своего часа» — момента, когда пользователь
осуществит какие-то операции с фильмом. Например, символ кнопки может представлять
собой изображение человека, сидящего вместе с другими людьми за столом в кабинете
для совещаний. Когда пользователь щелкает на кнопке с изображением человека,
фильм переходит к кадру, представляющему ту или иную информацию о служебных
обязанностях данного человека.
Чтобы создать
символ кнопки в системе Flash, выполните следующие шаги.
Вы можете
также выбрать одну из готовых кнопок, поставляемых вместе с пакетом Flash, обратившись
к команде Window > Common Libraries > Buttons (Окно > Общие
библиотеки > Кнопки). При этом на экран будет выведено окно библиотеки кнопок,
позволяющее выбирать стандартные кнопки. Выбранная кнопка дублируется в этом
окне в области предварительного просмотра. Нужную кнопку достаточно перетащить
мышью в рабочую зону. Вы можете создавать произвольное количество копий одной
и той же кнопки. Копии называются
экземплярами (instances). Однако следует учитывать, что для работы с
несколькими экземплярами одного символа для каждого экземпляра необходимо создать
отдельный слой. (Теоретически фильм в формате Flash может нормально функционировать
даже при наличии нескольких экземпляров кнопки в одном слое, но управление ими
может превратиться для вас в серьезную проблему.)
Рис.
1.2. Диалоговое окно Symbol Properties при создании символа кнопки
Каждый экземпляр
символа соотносится с определенным способом применения последнего. Строго говоря,
конкретная кнопка представляет собой экземпляр символа, обладающего специфическими
характеристиками кнопки. Основные свойства кнопки немногочисленны, но имеют
исключительно большое значение для сценариев ActionScript. Чтобы познакомиться
со свойствами того или иного экземпляра, выделите его мышью, а затем выполните
команду Modify > Instance (Модифицировать > Экземпляр). Можете
также воспользоваться командой Window > Panels > Instance
(Окно > Панели > Экземпляр) или комбинацией клавиш Ctrl+I (Windows)
либо Cmd+I (Macintosh). В результате выполнения любого из перечисленных действий
на экране появится панель Instance (Экземпляр). На рис. 1.3 вы можете увидеть
образец этой панели, в котором представлены свойства типичной кнопки. Обратите
внимание на различия между панелями Instance (Экземпляр), представленными на
рис. 1.1 и 1.3.
Рис.
1.3. Панель Instance для экземпляра символа кнопки
Как нетрудно
видеть, на рис. 1.3 в раскрывающемся списке Behavior (Модель поведения) выбран
пункт Button (Кнопка), а в списке Options (Параметры) — вариант Track as Button
(Отслеживать как кнопку). Подобные элементы чрезвычайно важны для сценария ActionScript.
Выбор варианта Button в раскрывающемся
списке Behavior играет ключевую роль в указании на тот факт, что соответствующий
экземпляр действительно будет использоваться в качестве кнопки; Те же параметры
устанавливаются и при создании новых символов. Однако учтите, что вне зависимости
от того, как первоначально был определен тот или иной символ — Graphic (Графика),
Button (Кнопка) или Movie Clip (Клип), — при принятии определенных мер предосторожности
конкретный экземпляр этого символа может обладать любой моделью поведения.
Как на рис.
1.1, так и на рис. 1.3 в правом нижнем углу окна находится значок с изображением
стрелки — кнопка Edit Actions (Редактировать операции). Щелчок на этом значке
позволяет перейти в режим, в котором можно создать новый или отредактировать
существующий сценарий ActionScript, связанный с данной кнопкой. На рис. 1.4.
представлен типичный (и чрезвычайно простой) сценарий, написанный на языке ActionScript.
Рис.
1.4. К числу свойств экземпляра кнопки относится ее сценарий
Чтобы почувствовать
принцип работы механизма свойств кнопки, попробуйте провести следующий эксперимент.
Как мы видели,
экземпляр символа кнопки вполне может быть преобразован в символ другого типа;
обратное также верно. Если вы создадите некий символ графики или клипа, а затем
определите для его экземпляра модель поведения кнопки, установив переключатель
Button (Кнопка) в группе Behavior (Модель поведения), то станет доступной панель
Object Actions (Операции объекта) и у вас появится возможность работать над
сценарием. На рис. 1.5 представлен символ с именем Graphic. Меню выбора языковых
конструкций в панели Object Actions (Операции объекта) доступно, однако при
этом подразумевается, что текущий экземпляр действительно является кнопкой и
поддерживает сценарии. Аналогичным способом можно осуществлять подобные преобразования
и для символов клипа.
Рис.
1.5. Экземпляр графического символа превращается в кнопку
Изменение
модели поведения экземпляра в фильме
В фильмах
в формате Flash типы объектов могут меняться. Для тех, кто знаком с технологией
Flash, это не новость, однако теперь тип экземпляра произвольного символа можно
изменять «на лету» — экземпляры графики способны превращаться в
кнопки и клипы. Скажем, используемый в кадре 1 экземпляр графики вполне может
быть преобразован в кнопку в кадре 10, а в кадре 40 он может применяться уже
как клип. От подобных преобразований в большинстве случаев рекомендуется воздерживаться,
но автор считает своим долгом указать на данную возможность, поскольку ее следует
иметь в виду при поиске ошибок: можно случайно изменить модель поведения объекта
и получить неожиданные результаты.
Еще одна
«родная» для сценариев область фильма — это кадры (frames).
Для ключевых кадров (keyframes), для пустых ключевых кадров (empty keyframes)
и даже для самых обычных кадров предусмотрена возможность назначения сценариев.
Однако реально используются только сценарии, связанные с ключевыми кадрами и
пустыми ключевыми кадрами. Сценариями ActionScript, находящимися в обычных кадрах,
«владеют» соответствующие ключевые кадры. Попробуйте выполнить описанную
ниже последовательность действий, чтобы познакомиться с взаимоотношениями сценариев
и ключевых кадров.
Обратите
внимание на маленькую букву а, которая присутствует на киноленте над начальным
ключевым кадром (рис. 1.6). Она указывает на то, что данный кадр содержит сценарий
ActionScript. Но мы ведь ввели сценарий в кадре 20. Теперь нам необходимо довести
наш эксперимент до логического завершения. Для этого вам понадобится произвести
следующие действия.
Рис.
1.6. Ввод сценария кадра
В том, что
случилось, нет ничего таинственного, но здесь работают механизмы, принцип действия
которых важен для понимания возможностей языка ActionScript. Когда пользователь
создает сценарий для обычного, неключевого, кадра, этот сценарий назначается
ближайшему ключевому кадру, находящемуся слева от текущего. Если назначить сценарий
нескольким ключевым кадрам и просмотреть кадры, расположенные между ними, вы
обнаружите тот же сценарий в каждом из них. Если вы измените сценарий, находящийся
в кадре 5, содержимое ключевого кадра, расположенного слева от этого кадра,
также изменится. Сходным образом при изменении сценария ActionScript в любом
из обычных кадров, находящихся между двумя ключевыми, будут модифицированы сценарии,
назначенные всем обычным кадрам в этом промежутке. В случае модификации сценария
ключевого кадра будут изменены все кадры, расположенные справа от него, вплоть
до следующего ключевого кадра.
Напрашивается
вывод о том, что все кадры, находящиеся между двумя ключевыми кадрами или между
ключевым кадром и концом киноленты, автоматически перенимают сценарий ближайшего
ключевого кадра, расположенного слева. Несмотря на кажущуюся логичность, подобное
заключение ошибочно. Если бы это было так, фильмы Flash были бы совершенно неподходящей
средой для сценариев ActionScript. На самом деле все команды, составляющие сценарий,
выполняются только ключевыми кадрами. В противном случае команды сценария многократно
дублировались бы всеми обычными кадрами. Например, в нашем эксперименте с кадрами
в текст сценария была помещена команда Stop, которая автоматически оказалась
в ключевом кадре. Допустим, в одном из ключевых кадров вашего фильма вызывается
команда остановки Stop. После остановки пользователь щелкает на кнопке Play
(Воспроизвести), чтобы продолжить просмотр фильма. Если бы команда Stop присутствовала
во всех обычных кадрах до следующего ключевого, пользователю пришлось бы постоянно
щелкать на кнопке Play, и просмотр такого «дерганого» фильма был
бы чрезвычайно утомительным и затяжным делом. Поэтому, хотя никто не запрещает
вводить сценарии в обычных кадрах, лишь ключевые кадры могут запускать сценарии
ActionScript.
Метки
кадров
Структура
полей свойств кадров чрезвычайна проста по сравнению с кнопками. В поле Label
(Метка) панели Frame (Кадр) вы имеете возможность задавать метки кадров и комментарии.
Чтобы ввести метку, выделите ключевой кадр и наберите в поле Label (Метка) строку метки. Если вы хотите ввести не метку, а комментарий, предварите строку двумя косыми чертами (//). Метки представляют собой эффективный механизм, позволяющий значительно улучшить качество сценариев Action-Script. При работе над сценариями регулярно возникает необходимость перейти к конкретному кадру и выполнить различные действия. Здесь необходим хороший механизм адресации кадров. Применяя метки, вы значительно облегчаете себе задачу. На рис. 1.7 представлена метка BusStop, в имени которой содержится намек на то, что произойдет, когда пользователь перейдет к соответствующему кадру. В сценарии ActionScript можно использовать команду перехода к метке BusStop, чтобы избежать необходимости долго и мучительно вспоминать конкретный номер нужного кадра. (Кадр 83? Или 82? Или 84? А может, 48?)
Рис.
1.7. Метка кадра
СОВЕТ
О
КОМАНДАХ ПЕРЕХОДА И ОБ ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ. Если вы программист,
то не можете не знать, что применение команд перехода всячески осуждается современной
теорией как действия, несовместимые с концепцией структурного программирования,
и считается верным признаком дурного стиля. Но здесь мы имеем дело с хорошо
организованной системой передачи управления между модулями, где переходы между
кадрами соотносятся лишь с кинолентой Flash, но не со структурой программы.
В конечном счете все элементы программирования сосредоточены в объектах и определенных
позициях киноленты. Когда необходимо отойти от линейной последовательности кадров,
заданной кинолентой, переход лучше всего производить с помощью меток. С другой
стороны, явно заданная метка — одно из сущностных свойств объекта в языках сценариев.
Комментарии
к кадрам
Комментарии
призваны помочь лучше видеть на этапе разработки, что происходит в программе.
Они никак не влияют на ход ее выполнения. Однако, так же как метки, комментарии
определяются в панели Frame (Кадр). Поскольку для ввода комментариев используется
то же поле, что и для меток, необходимо удостовериться, что установлена соответствующая
модель поведения. На рис. 1.8 представлена кинолента, где в слое BusStop присутствуют
как метки, так и комментарии. Комментарии просто напоминают программисту о том,
что будет происходить в фильме, пока кинолента переходит к следующему ключевому
кадру.
Рис.
1.8. Комментарии и метки ключевых кадров отображаются на киноленте
Создание сценариев ActionScript
Для людей,
далеких от программирования, язык ActionScript, пожалуй, следует признать наиболее
легким и простым средством создания сценариев. Профессиональных программистов
этот язык, как правило, поначалу просто шокирует. Программисты похожи на коров,
привыкших к свободному выпасу: им подавай бескрайние просторы текстового файла,
где можно написать любую программу, любой сценарий. Сценарии ActionScript от
начала и до конца
«пишутся» в режиме выбора нужных языковых конструкций с помощью
мыши.
Панели Frame
Actions (Операции кадра) и Object Actions (Операции объекта) по существу представляют
собой одну и ту же контекстно-зависимую панель операций, внешний вид которой
меняется в зависимости от того, выделен в настоящий момент кадр или объект.
В этой панели имеется поле редактора ActionScript, с помощью которого можно
вводить исходный текст сценариев. Чтобы открыть панель Frame Actions или Object
Actions, выполните команду Window > Actions (Окно > Операции).
Для открытия этой панели можно также использовать комбинацию клавиш Ctrl+Alt+A
(Windows) или Cmd+Option+A (Macintosh) либо щелкнуть на соответствующей кнопке
в правом нижнем углу панели Instance (Экземпляр). Чтобы список операций был
доступен, следует предварительно выделить какой-либо клип, кнопку или кадр.
Существует несколько различных способов ввода операций и других элементов сценария
ActionScfipt. Вы можете выбрать любой из них.
Обычный
режим
Начинающим
рекомендуется использовать для ввода сценариев обычный режим, который инициируется
выбором команды Normal Mode (Обычный режим) в меню, открывающемся при щелчке
на кнопке с направленной вправо стрелкой в правом верхнем углу палитры операций.
При работе над сценарием в обычном режиме необходимо явным образом задавать
значения параметров для всех элементов языка: операций, функций, команд, свойств
и объектов. На рис. 1.9 вы можете видеть список операций Basic Actions (Основные
операции), а также средства, помогающие разработчику установить значения всех
параметров конкретной операции. Некоторые особенности использования
параметров не вполне очевидны. Так, если в команде перехода вы применяете метку,
а не номер строки, имя метки необходимо заключить в кавычки. С подобными особыми
условиями обычный режим справляется автоматически: если вы выберете в раскрывающемся
списке Туре (Тип) в нижней части экрана значение Frame Label (Метка кадра),
редактор сценариев сам позаботится о том, чтобы «закавычить» имя
метки. Обратите внимание также на изображенную на рисунке кнопку в правом нижнем
углу окна. Эта кнопка позволяет скрыть списки, предназначенные для выбора параметров,
и обеспечивает возможность переключения между обычным и экспертным режимами.
Рис.
1.9. В обычном режиме редактор сценариев помогает корректно устанавливать
значения параметров
В обычном
режиме в редакторе сценариев ActionScript присутствует папка Basic Actions (Основные
операции), в которой содержится больше половины всех команд, существовавших
в пакете Flash 4. Если вы не используете никаких дополнительных операций, у
вас есть возможность экспортировать фильм в формат Flash 4. В списке операций
находятся еще пять папок. Одна из них — папка Actions (Операции), в которой
можно найти значительно более широкий ассортимент языковых средств: в формате
Flash 5 предусмотрен целый ряд дополнительных команд, функций, свойств и объектов,
с которыми способен работать редактор сценариев ActionScript.
Когда в обычном
режиме выбирается объект кнопки или экземпляр клипа, в текст сценария автоматически
включается соответствующая конструкция. Так, в примере, приведенном на рис.
1.9, пользователь выбрал в папке Basic Actions (Основные операции) команду перехода,
а инструкция on(release) была вставлена редактором автоматически. При работе
над большими сценариями эта особенность редактора будет вам скорее мешать, чем
помогать, поскольку при вводе каждой новой команды в тексте сценария будет появляться
новая инструкция on или onClipEvent. Во многих случаях требуется, чтобы сценарий
реагировал на одно событие мыши или клипа целой последовательностью операций,
и необходимость вручную удалять многочисленные конструкции вида on(release)
ужасно раздражает.
Экспертный
режим
Предпочитая
экспертный режим, который инициируется выбором команды Expert Mode (Экспертный
режим) в меню, открывающемся при щелчке на кнопке с направленной вправо стрелкой
в правом верхнем углу палитры операций, вы отказываетесь от «сервиса»,
предлагаемого редактором сценариев в обычном режиме, поскольку этот сервис иной
раз носит излишне навязчивый характер. Вместе с тем даже в экспертном режиме
редактор все же оказывает вам некоторое содействие в корректном употреблении
различных элементов языка. Скажем, если в экспертном режиме выбрать команду
gotoAndPlay, в окне исходного текста появится следующая строка: gotoAndPlay
(frame):
Эта «инструкция»
дает вам понять, что необходимо ввести определенную информацию о кадре (frame),
но здесь нет ни имени метки в кавычках, ни указаний на значения других параметров.
К примеру, если вы хотите, чтобы данный кадр воспроизводился в другой сцене
(scene), следует указать, в какой именно: gotoAndPlay ("Scene 5".
"hit");
В то же время
в тексте отсутствуют нежелательные конструкции обработчиков событий, связанных
с кнопками или клипами. Вы должны вставить соответствующий код вручную. Когда
вы приобретете некоторый опыт в использовании ActionScript, механизм работы
с параметрами станет для вас гораздо понятнее. Но пока такого опыта у вас нет,
значительно разумнее пользоваться поддержкой, предоставляемой редактором в обычном
режиме, — это сэкономит ваше время и упростит процесс создания сценариев.
Различные
возможности, связанные с обработкой событий мыши, подробно рассматриваются в
уроке 6, но с некоторыми вариантами, без которых в большинстве случаев не обходятся
сценарии, определенные для кнопок, хотелось бы познакомить вас уже сейчас (рис.
1.10). Наряду с событием Release для активизации сценария можно использовать
еще шесть событий мыши. Кроме того, если установить флажок Key Press (Нажатие
клавиши), у вас появится возможность использовать для запуска сценария различные
клавиши. Если установить несколько флажков, будет использоваться несколько разных
вариантов запуска сценария, но ничто не может заменить старого доброго события
Release, которое происходит, как только пользователь отпускает кнопку мыши.
Рис.
1.10. Изменение параметров вызова сценария
Так же как
для кнопок, для клипов могут быть предусмотрены различные условия вызова сценария
на основе механизма обработки событий. По умолчанию в конструкции onClipEvent
используется событие load, то есть сценарий запускается при загрузке клипа.
Однако существует еще несколько событий, связанных с клипами (рис. 1.11).
Рис.
1.11. События для клипов отличаются от событий для кнопок
Обратите
внимание на то обстоятельство, что для обозначения событий, связанных с клипами,
употребляются идентификаторы mouseDown и mousellp, а не onPress и onRelease.
Пока вы не почувствуете, что освоились со всеми подобными нюансами, лучше пользоваться
обычным режимом. Впрочем, вы можете вводить наиболее сложные фрагменты кода
в обычном режиме и переходить в экспертный режим, когда самая тяжелая часть
работы останется позади.
Редактор
выражений, который был реализован в пакете Flash 4 как отдельное программное
средство, в версии Flash 5 интегрирован в основную часть программы. Многие возможности
редактора выражений реализованы в виде автоматических средств, вступающих в
действие при перетаскивании языковых конструкций в поле редактора сценариев.
Редактировать выражения в этом поле можно как в обычном, так и в экспертном
режиме. В обычном режиме редактирование производится средствами, находящимися
в нижней части панели операций. Таким образом можно изменить параметры той или
иной команды, свойства, функции, операции, объекта. При вставке языковой конструкции
ActionScript в текст сценария в вашем распоряжении оказываются все параметры
этого элемента. В уроке 2 мы рассмотрим различные типы данных, с которыми вам
придется работать в сценариях ActionScript. Именно тип данных определяет набор
операций, которые допустимы в выражениях с этими данными.
Клипы являются
особыми символами: к их свойствам имеют доступ сценарии ActionScript, причем
речь идет о доступе как для чтения, так и для записи. Хотя в объектах кнопок
также могут содержаться сценарии, последние не имеют возможности изменять эти
объекты. Свойства символов графики также не могут изменяться сценариями; более
того, у символов графики вообще не может быть сценариев. Кадры способны содержать
сценарии ActionScript, однако у кадров нет свойств, значения которых эти сценарии
могли бы изменять. Сценарий кадра может лишь осуществить переход к другому кадру
или вызвать определенный кадр, находящийся в том же или ином клипе.
У клипа есть
собственная кинолента; клип может воспроизводиться даже в ситуации, когда воспроизведение
главной киноленты остановлено. Если мы посмотрим на клип как на объект, то увидим,
что это небольшой фильм в формате Flash, у которого есть свой жизненный цикл;
посредством сценариев клип может сам воздействовать на другие клипы, на главную
киноленту, а также на кнопки и кадры, равно как и подвергаться воздействию с
их стороны. Язык ActionScript является средством, позволяющим организовать совместную
работу различных частей фильма (объектов).
Для корректной
работы с объектами различных уровней фильма в языке сценариев должен быть предусмотрен
способ адресации объектов, относящихся к разным кинолентам. Путем (path)
от одного объекта к другому называется
позиция,
или уровень, первого объекта по отношению ко второму. Вы будете рады узнать,
что в ActionScript принята система адресации, применяемая в указателях URL,
которые используются в Web-страницах и языке JavaScript. В приведенном выше
примере с зоопарком можно выделить три объекта с отдельными кинолентами:
В пакете
Flash 5 применяется двойная система адресации. Старая система, которая использовалась
в версии Flash 4, по-прежнему функционирует, и вы вполне можете работать с ней.
Чтобы адресовать тот или иной объект, требуется задать его положение, начиная
с главной киноленты и последовательно переходя к киноленте объекта teeth через
киноленту объекта 1iоn. Чтобы получить абсолютную ссылку на объект teeth, в
соответствии с правилами записи адресов URL мы должны использовать конструкцию
вида /lion/teeth. В такой нотации отражается тот факт, что объект teeth является
частью объекта lion, который, в свою очередь, является частью объекта zoo. Поскольку
объект zoo расположен на главной киноленте, для его обозначения не нужен идентификатор
— достаточно косой черты (/). (Автору проще всего представить себе эти отношения
в виде многоуровневого меню вида zoo> lion > teeth.)
Чтобы адресовать
родительский объект, например 1ion относительно teeth, следует применять комбинацию
символов ../, указывающую на направление пути вверх. Таким образом, чтобы адресовать
главную киноленту zoo из клипа teeth, вложенного в клип lion, необходимо использовать
следующую строку:
../../
Каждая цепочка
символов .. / как бы поднимает ссылку на один уровень вверх.
В пакете Flash 5 появилась еще одна система адресации, отличающаяся большей простотой и лучше согласующаяся с духом объектно-ориентированного программирования, о котором мы уже говорили. Корнем любой иерархической структуры в фильме является основная кинолента. В старой системе адресации ее можно было обозначать косой чертой (/). В новой системе главная кинолента всегда обозначается особым идентификатором _root. В нашем примере основной кинолентой является zoo. Чтобы обратиться к ней, мы должны использовать идентификатор _root. Таким образом, для того чтобы указать на объект teeth, следует применить запись вида
_rootlion.teeth
Следует также подчеркнуть, что все переменные, методы и свойства рассматриваются как составные части соответствующего объекта. К ссылке на объект можно присоединять имена его элементов. Например, можно предусмотреть в фильме львиный рык, определив в клипе teeth поле sound. Полное имя этого поля будет выглядеть следующим образом:
_ root.lion.teeth.sound
В дальнейшем
мы будем постоянно пользоваться иерархической системой ссылок. Иерархических
ссылок будет становиться все больше по мере рассмотрения сложных фильмов, созданных
с применением пакета Flash и языка ActionScript. Если вы никогда не сталкивались
с подобной системой адресации, перечитайте этот раздел, чтобы убедиться, что
вы все хорошо поняли. Тогда в дальнейшем вам не придется, встретившись с составной
ссылкой на переменную, свойство или объект, лихорадочно листать страницы, чтобы
найти ключ к разгадке.
В этом уроке
мы научились...