Урок 1. ActionScript — источник энергии Flash

ActionScript — это язык сценариев, который позволяет разработчикам макси-мально реализовать потенциал фильмов в формате Flash. В этом уроке вы познакомитесь с рядом простейших объектов, применяемых в сценариях ActionScript, и узнаете о роли, которую играют различные элементы этого языка в его структуре.

Возможности 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 как интеллектуальная среда

В предыдущих версиях пакета ActionScript вся работа со сценариями была сосредоточена в небольшом окне, где необходимые операции выбирались в меню. На экране представлялся лишь небольшой фрагмент исходного текста, и создать в таких условиях мало-мальски интересный сценарий было задачей, мягко говоря, сложной. В версии Flash 5 язык ActionScript превратился в абсолютно самостоятельный объектно-ориентированный язык сценариев. Он во многом схож с JavaScript, но последовательное формирование сценария и данной системе осуществляется путем выбора мышью необходимых языковых конструкций. Предназначенный для опытных пользователей экспертный режим позволяет вручную вводить код, как в обычном текстовом редакторе; предусмотрены также механизмы автозавершения и выбора для вставки в текст сценария различных языковых конструкций: команд, функций, операторов и объектов — с помощью мыши. Окно редактора ActionScript, доступное через панели Object Actions (Операции объекта) и Frame Actions (Операции кадра), в обычном режиме помогает начинающим в изучении и применении языка ActionScript. Этот режим используют начинающие пользователи; опытные создатели фильмов, как правило, не прибегают к его услугам.

ActionScript как модульный язык

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 Color(_root.lion.teeth); toothColor.setRGB(FF9900);

Такое изменение можно произвести в сценарии, обрабатывающем щелчок на какой-либо кнопке, в сценарии определенного кадра, или клипа 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. Выполните команду File > New (Файл > Создать) или воспользуйтесь комбинацией клавиш Ctrl+N (Windows) либо Cmd+N (Macintosh), чтобы открыть новую страницу Flash..
  2. Выберите инструмент Rectangle (Прямоугольник) в наборе инструментов, нарисуйте прямоугольник на странице и выделите его с помощью инструмента Arrow (Стрелка), захватив в формируемую (при нажатой кнопке) мышью область выделения весь прямоугольник.
  3. Выполните команду Insert t Convert to Symbol (Вставка > Преобразовать в символ) или нажмите клавишу F8, чтобы открыть окно свойств символа. В раскрывающемся списке Behavior (Модель поведения) выберите вариант Movie Clip (Клип), назовите свой клип МуМС и щелкните на кнопке ОК.
  4. Выполните команду Window > Panels > Instance (Окно > Панели > Экземпляр) или воспользуйтесь комбинацией клавиш Ctrl+I (Windows) либо Cmd+N (Macintosh). Когда на экране появится панель Instance (Экземпляр), наберите строку sample в поле Name (Имя), как показано на рис. 1.1.

Рис. 1.1. В панели Instance можно ввести имя экземпляра клипа

Рис. 1.1. В панели Instance можно ввести имя экземпляра клипа

Ваш клип готов к работе. На рисунке представлены вновь созданный клип и панель Instance (Экземпляр), играющая одну из ключевых ролей в организации работы сценариев. Имя экземпляра, введенное в поле Name (Имя), фактически более важно, чем имя символа, показанное над раскрывающимся списком Behavior (Модель поведения).

Кнопки

До выхода Flash версии 5 кнопки были единственными символьными объектами, где могли размещаться сценарии. И несмотря на то что в настоящее время клипам также можно назначать сценарии ActionScript, кнопки по-прежнему играют в этом языке ключевую роль. Пользователям фильмов Flash хорошо известно, что символ кнопки внешне может вообще мало походить на кнопку. Символ кнопки может быть частью большого графического изображения, спокойно ожидающей «своего часа» — момента, когда пользователь осуществит какие-то операции с фильмом. Например, символ кнопки может представлять собой изображение человека, сидящего вместе с другими людьми за столом в кабинете для совещаний. Когда пользователь щелкает на кнопке с изображением человека, фильм переходит к кадру, представляющему ту или иную информацию о служебных обязанностях данного человека.

Чтобы создать символ кнопки в системе Flash, выполните следующие шаги.

  1. Выберите команду File > New (Файл > Создать) или воспользуйтесь комбинацией клавиш Ctrl+N (Windows) либо Cmd+N (Macintosh), чтобы открыть новую страницу Flash.
  2. Сделайте двойной щелчок на имени слоя Layer 1 в окне киноленты и переименуйте этот слой в RealButton. Возможность изменить имя появляется при двойном щелчке на имени нужного слоя.
  3. Выберите инструмент Circle (Окружность) [Строго говоря, такого инструмента нет. Есть инструмент Oval (Овал). Если вам нужна именно окружность, используйте этот инструмент при нажатой клавише Shift. — Примеч. перев.] и нарисуйте окружность в рабочей зоне (stage).
  4. Щелкните на имени RealButton в списке слоев в окне киноленты. При этом вновь созданная окружность будет выделена.
  5. Выберите команду Insert > Convert to Symbol (Вставка > Преобразовать в символ) или нажмите клавишу F8.
  6. В окне свойств символа установите переключатель Button (Кнопка) в группе Behavior (Модель поведения) и введите имя RealButton в поле Name (Имя), как показано на рис. 1.2. Для нового символа на киноленте автоматически создаются кадры Up (кнопка отжата), Over (указатель мыши над кнопкой), Down (кнопка нажата) и Hit (срабатывание). Эти кадры не имеют большого значения для самого сценария ActionScript, но определяют условия активизации сценария с помощью мыши.

Вы можете также выбрать одну из готовых кнопок, поставляемых вместе с пакетом Flash, обратившись к команде Window > Common Libraries > Buttons (Окно > Общие библиотеки > Кнопки). При этом на экран будет выведено окно библиотеки кнопок, позволяющее выбирать стандартные кнопки. Выбранная кнопка дублируется в этом окне в области предварительного просмотра. Нужную кнопку достаточно перетащить мышью в рабочую зону. Вы можете создавать произвольное количество копий одной и той же кнопки. Копии называются экземплярами (instances). Однако следует учитывать, что для работы с несколькими экземплярами одного символа для каждого экземпляра необходимо создать отдельный слой. (Теоретически фильм в формате Flash может нормально функционировать даже при наличии нескольких экземпляров кнопки в одном слое, но управление ими может превратиться для вас в серьезную проблему.)

Рис. 1.2. Диалоговое окно Symbol Properties при создании символа кнопки

Рис. 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. Панель 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. К числу свойств экземпляра кнопки относится ее сценарий

Рис. 1.4. К числу свойств экземпляра кнопки относится ее сценарий

Рис. 1.4. К числу свойств экземпляра кнопки относится ее сценарий

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

  1. Создайте кнопку, как описано выше. Назовите ее RealButton.
  2. Откройте панель Instance (Экземпляр).
  3. В раскрывающемся списке Behavior (Модель поведения) выберите пункт Graphic (Графика). Экземпляр символа кнопки отныне будет вести себя как экземпляр символа графики. Выделите этот экземпляр графики.
  4. Щелкните на значке Edit Actions (Редактировать операции), чтобы открыть панель Object Actions (Операции объекта), и выберите одну из операций ActionScript. Обратите внимание, что все команды в тексте сценария формируются автоматически, текст не нужно редактировать вручную. Хотя значок в панели Symbol (Символ) по-прежнему указывает, что мы имеем дело с кнопкой, экземпляр этого символа был определен нами как символ графики, а у символов графики нет свойств, которые можно было бы изменять с помощью сценариев. Иными словами, для символов графики нельзя создавать сценарии. Чтобы действия пользователя можно было обрабатывать через механизм событий мыши, модель поведения экземпляра должна быть определена как Movie Clip (Клип) или Button (Кнопка).

Как мы видели, экземпляр символа кнопки вполне может быть преобразован в символ другого типа; обратное также верно. Если вы создадите некий символ графики или клипа, а затем определите для его экземпляра модель поведения кнопки, установив переключатель Button (Кнопка) в группе Behavior (Модель поведения), то станет доступной панель Object Actions (Операции объекта) и у вас появится возможность работать над сценарием. На рис. 1.5 представлен символ с именем Graphic. Меню выбора языковых конструкций в панели Object Actions (Операции объекта) доступно, однако при этом подразумевается, что текущий экземпляр действительно является кнопкой и поддерживает сценарии. Аналогичным способом можно осуществлять подобные преобразования и для символов клипа.

Рис. 1.5. Экземпляр графического символа превращается в кнопку

Рис. 1.5. Экземпляр графического символа превращается в кнопку

Изменение модели поведения экземпляра в фильме

В фильмах в формате Flash типы объектов могут меняться. Для тех, кто знаком с технологией Flash, это не новость, однако теперь тип экземпляра произвольного символа можно изменять «на лету» — экземпляры графики способны превращаться в кнопки и клипы. Скажем, используемый в кадре 1 экземпляр графики вполне может быть преобразован в кнопку в кадре 10, а в кадре 40 он может применяться уже как клип. От подобных преобразований в большинстве случаев рекомендуется воздерживаться, но автор считает своим долгом указать на данную возможность, поскольку ее следует иметь в виду при поиске ошибок: можно случайно изменить модель поведения объекта и получить неожиданные результаты.

Свойства кадра

Еще одна «родная» для сценариев область фильма — это кадры (frames). Для ключевых кадров (keyframes), для пустых ключевых кадров (empty keyframes) и даже для самых обычных кадров предусмотрена возможность назначения сценариев. Однако реально используются только сценарии, связанные с ключевыми кадрами и пустыми ключевыми кадрами. Сценариями ActionScript, находящимися в обычных кадрах, «владеют» соответствующие ключевые кадры. Попробуйте выполнить описанную ниже последовательность действий, чтобы познакомиться с взаимоотношениями сценариев и ключевых кадров.

  1. Выполните команду File > New (Файл > Создать) или воспользуйтесь комбинацией клавиш Ctrl+N (Windows) либо Cmd+N (Macintosh). Откроется новая страница; на киноленте окажется единственный слой Layer 1, а ключевым станет первый кадр.
  2. Переименуйте слой Layer 1 в FrameTest (проверка кадра). Лучше с самого начала приобрести полезную привычку давать всем элементам Flash значимые имена. Еще более важно следовать этому принципу в сценариях ActionScript.
  3. Однократным щелчком выделите кадр 40. Выделенные кадры идентифицируются на экране цветом.
  4. Выполните команду Insert > Frame (Вставка > Кадр) или просто нажмите клавишу F5. Вы получите 40 рабочих кадров.
  5. Выделите кадр 20 и выполните команду Modify > Frame (Модифицировать > Кадр). Для этой команды существует клавиатурное соответствие — Ctrl+F (Windows) либо Cmd+F (Macintosh). На экране появится панель Frame (Кадр).
  6. Щелкните на значке Show Actions (Показать операции) в правом нижнем углу рабочей зоны, а затем щелкните на пункте Basic Actions (Основные операции) в списке доступных языковых конструкций открывшейся панели Frame Actions (Операции кадра). Выполните двойной щелчок на строке Stop (Остановить) в списке операций.

Обратите внимание на маленькую букву а, которая присутствует на киноленте над начальным ключевым кадром (рис. 1.6). Она указывает на то, что данный кадр содержит сценарий ActionScript. Но мы ведь ввели сценарий в кадре 20. Теперь нам необходимо довести наш эксперимент до логического завершения. Для этого вам понадобится произвести следующие действия.

  1. Сделайте ключевым кадр 10. Для этого надо щелкнуть на кадре. 10 на киноленте, а затем нажать клавишу F6 или воспользоваться командой Insert > Keyframe (Вставка > Ключевой кадр).
  2. Выделите кадр 20 и выполните команду Modify > Frame (Модифицировать > Кадр). На экране появится панель Frame (Кадр).
  3. Щелкните на кнопке Object Actions (Операции объекта). Сценарий, который отображался в панели Frame Actions (Операции кадра), исчез.

Рис. 1.6. Ввод сценария кадра

Рис. 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. Метка кадра

Рис. 1.7. Метка кадра

СОВЕТ

Image:Prim.gif О КОМАНДАХ ПЕРЕХОДА И ОБ ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ.
Если вы программист, то не можете не знать, что применение команд перехода всячески осуждается современной теорией как действия, несовместимые с концепцией структурного программирования, и считается верным признаком дурного стиля. Но здесь мы имеем дело с хорошо организованной системой передачи управления между модулями, где переходы между кадрами соотносятся лишь с кинолентой Flash, но не со структурой программы. В конечном счете все элементы программирования сосредоточены в объектах и определенных позициях киноленты. Когда необходимо отойти от линейной последовательности кадров, заданной кинолентой, переход лучше всего производить с помощью меток. С другой стороны, явно заданная метка — одно из сущностных свойств объекта в языках сценариев.

Комментарии к кадрам

Комментарии призваны помочь лучше видеть на этапе разработки, что происходит в программе. Они никак не влияют на ход ее выполнения. Однако, так же как метки, комментарии определяются в панели Frame (Кадр). Поскольку для ввода комментариев используется то же поле, что и для меток, необходимо удостовериться, что установлена соответствующая модель поведения. На рис. 1.8 представлена кинолента, где в слое BusStop присутствуют как метки, так и комментарии. Комментарии просто напоминают программисту о том, что будет происходить в фильме, пока кинолента переходит к следующему ключевому кадру.

Рис. 1.8. Комментарии и метки ключевых кадров отображаются на киноленте

Рис. 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. В обычном режиме редактор сценариев помогает корректно устанавливать значения параметров

Рис. 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. Изменение параметров вызова сценария

Рис. 1.10. Изменение параметров вызова сценария

Так же как для кнопок, для клипов могут быть предусмотрены различные условия вызова сценария на основе механизма обработки событий. По умолчанию в конструкции onClipEvent используется событие load, то есть сценарий запускается при загрузке клипа. Однако существует еще несколько событий, связанных с клипами (рис. 1.11).

Рис. 1.11. События для клипов отличаются от событий для кнопок

Рис. 1.11. События для клипов отличаются от событий для кнопок

Обратите внимание на то обстоятельство, что для обозначения событий, связанных с клипами, употребляются идентификаторы mouseDown и mousellp, а не onPress и onRelease. Пока вы не почувствуете, что освоились со всеми подобными нюансами, лучше пользоваться обычным режимом. Впрочем, вы можете вводить наиболее сложные фрагменты кода в обычном режиме и переходить в экспертный режим, когда самая тяжелая часть работы останется позади.

Редактирование выражений

Редактор выражений, который был реализован в пакете Flash 4 как отдельное программное средство, в версии Flash 5 интегрирован в основную часть программы. Многие возможности редактора выражений реализованы в виде автоматических средств, вступающих в действие при перетаскивании языковых конструкций в поле редактора сценариев. Редактировать выражения в этом поле можно как в обычном, так и в экспертном режиме. В обычном режиме редактирование производится средствами, находящимися в нижней части панели операций. Таким образом можно изменить параметры той или иной команды, свойства, функции, операции, объекта. При вставке языковой конструкции ActionScript в текст сценария в вашем распоряжении оказываются все параметры этого элемента. В уроке 2 мы рассмотрим различные типы данных, с которыми вам придется работать в сценариях ActionScript. Именно тип данных определяет набор операций, которые допустимы в выражениях с этими данными.

Клипы и пути в ActionScript

Клипы являются особыми символами: к их свойствам имеют доступ сценарии ActionScript, причем речь идет о доступе как для чтения, так и для записи. Хотя в объектах кнопок также могут содержаться сценарии, последние не имеют возможности изменять эти объекты. Свойства символов графики также не могут изменяться сценариями; более того, у символов графики вообще не может быть сценариев. Кадры способны содержать сценарии ActionScript, однако у кадров нет свойств, значения которых эти сценарии могли бы изменять. Сценарий кадра может лишь осуществить переход к другому кадру или вызвать определенный кадр, находящийся в том же или ином клипе.

Независимые киноленты

У клипа есть собственная кинолента; клип может воспроизводиться даже в ситуации, когда воспроизведение главной киноленты остановлено. Если мы посмотрим на клип как на объект, то увидим, что это небольшой фильм в формате Flash, у которого есть свой жизненный цикл; посредством сценариев клип может сам воздействовать на другие клипы, на главную киноленту, а также на кнопки и кадры, равно как и подвергаться воздействию с их стороны. Язык ActionScript является средством, позволяющим организовать совместную работу различных частей фильма (объектов).

Пути

Для корректной работы с объектами различных уровней фильма в языке сценариев должен быть предусмотрен способ адресации объектов, относящихся к разным кинолентам. Путем (path) от одного объекта к другому называется

позиция, или уровень, первого объекта по отношению ко второму. Вы будете рады узнать, что в ActionScript принята система адресации, применяемая в указателях URL, которые используются в Web-страницах и языке JavaScript. В приведенном выше примере с зоопарком можно выделить три объекта с отдельными кинолентами:

В пакете Flash 5 применяется двойная система адресации. Старая система, которая использовалась в версии Flash 4, по-прежнему функционирует, и вы вполне можете работать с ней. Чтобы адресовать тот или иной объект, требуется задать его положение, начиная с главной киноленты и последовательно переходя к киноленте объекта teeth через киноленту объекта liо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. Если вы никогда не сталкивались с подобной системой адресации, перечитайте этот раздел, чтобы убедиться, что вы все хорошо поняли. Тогда в дальнейшем вам не придется, встретившись с составной ссылкой на переменную, свойство или объект, лихорадочно листать страницы, чтобы найти ключ к разгадке.

Что нового мы узнали?

В этом уроке мы научились...

Далее: Урок 2. Переменные и типы данных