Учебник по Flash MX
Общие сведения об ActionScript
Подробное описание возможностей и особенностей ActionScript выходит за рамки данной книги. Дело в том, что в результате последних усовершенствований, внесенных в версию Flash MX, ActionScript превратился в настоящий язык программирования. Реализованные в нем возможности вполне заслуживают отдельной книги, соизмеримой по объему (а возможно, и превосходящей) с той, которая сейчас перед вами. Разумеется, с ростом возможностей увеличилась и сложность языка. И хотя его вполне по силам освоить начинающему программисту, но все же - программисту. А ведь далеко не каждый даже опытный пользователь компьютера может считать себя таковым. Поэтому мы ограничимся описанием основных концепций языка и общих правил построения сценариев на ActionScript. Практика показывает, что такого уровня знаний вполне достаточно для создания не очень сложных, но корректно работающих интерактивных фильмов.
ActionScript позволяет создавать сценарий для клипа, кнопки или кадра. Каждый такой сценарий (то есть фактически программа на языке ActionScript) жестко связан с соответствующим элементом фильма. При публикации фильма текст сценария, как и другие элементы фильма, экспортируется в SWF-файл. Тем не менее, при желании Вы можете сохранить его в отдельном файле с расширением .as (это обычный текстовый файл), чтобы впоследствии использовать в каком-либо другом фильме (или подарить другу).
Из сценария Вы можете обратиться к любому другому объекту фильма (из числа кнопок, клипов и кадров) и даже к другому фильму или какому-либо внешнему сетевому ресурсу. Например, можно указать, что при достижении считывающей головкой кадра с номером 10 необходимо загрузить звуковой файл, расположенный на сайте www.sound.ru. Поэтому Flash должен знать, в каких "отношениях" состоят объекты, фигурирующие в сценарии. Некорректное обращение к объекту обязательно приведет к ошибке в сценарии. Скажем, запрошенный звуковой файл будет воспроизведен в 10-м кадре временной диаграммы фильма, вместо того, чтобы озвучить 10-й кадр конкретного клипа.
В связи с указанными выше обстоятельствами, перед началом работы с ActionScript полезно разобраться с двумя понятиями: объектная модель языка и контекст выполнения сценария.
Объектная модель ActionScript
Под объектной моделью понимается совокупность типов объектов, которые могут использоваться в сценарии, и отношения подчиненности между ними.
Напомним, что в языках программирования объект описывается набором атрибутов (свойств) и перечнем методов (процедур), которые могут быть применены, к этому объекту. Для каждого класса объектов определен свой набор атрибутов и методов. Например, для объекта "Кнопка" в качестве атрибутов могут использоваться метка, геометрические размеры, координаты, а в качестве метода - реакция на нажатие кнопки. Конкретный объект - это экземпляр соответствующего класса. 2 экземпляра 1 и того же класса могут отличаться 1 от другого значениями атрибутов.
Для описания действий над объектами, а также для указания подчиненности объекта обычно применяется так называемая "точечная нотация". Например, чтобы указать, что к кнопке Button_l следует применить метод onPress(), используется конструкция
Button_1. onPress().
Если же требуется указать на принадлежность кнопки Button_1 клипу Сliр_2, то запись может выглядеть так:
Clip_2. Button_1.
Объектная модель, применяемая в ActionScript, во многом аналогична объектным моделям других сценарных языков (например, JavaScript). Вместе с тем, существуют и определенные различия. Основное из них состоит в том, что в ActionScript иерархия объектов строится относительно Flash-плеера, а не относительно HTML-документа, отображаемого в окне Web-браузера.
Например, если HTML-документ содержит форму Form_l, в которой имеется кнопка Input_1, то в JavaScript "подчиненность" кнопки описывается следующим образом:
Documen t. Widow. Form_1. Input_1.
При этом, если обращение к кнопке выполняется из текущего документа, отображаемого в том же окне браузера, то первые 2 уровня иерархии явно не указываются, а подразумеваются. Соответственно, для обращения к кнопке может быть использована конструкция
Form_1. Input_1.
Аналогичные правила действуют и в ActionScript. Например, чтобы обратиться к клипу, непосредственно вставленному в кадр- основного фильма, можно записать: _root. Clip_l.
Ключевое слово _root используется в качестве имени основного фильма и в данном случае может быть опущено. Если же клип является частью другого, "родительского", клипа, то для указания его подчиненности может использоваться ключевое слово _parent, например:
_parent. Clip_1.
Подробнее вопросы адресации объектов в ActionScript рассмотрены в следующем подразделе.
Теперь вернемся собственно к объектной модели ActionScript.
Как было сказано выше, корневым объектом, неявно присутствующим в любом сценарии, является Flash-плеер. На следующем уровне располагаются четыре класса объектов (рис.11.2):
- Movie (Объекты фильма);
- Core (Объекты ядра);
- Client/Server (Объекты клиент-серверной среды исполнения);
- Authoring (Объекты среды разработки).
рис.11.2. Объектная модель ActionScript
Объекты класса Movie позволяют представить в сценарии взаимоотношения между элементами фильма (то есть структуру фильма), а также управлять параметрами и поведением элементов фильма. К этому классу относятся, в частности, следующие объекты:
- Button (Кнопка) - объект, представляющий в сценарии кнопку; для такого объекта может динамически изменяться, например, порядок установки фокуса ввода;
- MovieClip (Клип) - объект, представляющий в сценарии клип; для него может динамически изменяться, например, число вложенных клипов;
- Mouse (Мышь) - объект, представляющий в сценарии указатель мыши; он позволяет управлять видимостью и стилем указателя;
- Key (Клавиатура) - объект, представляющий в сценарии клавиши, используемые для управления фильмом;
- Color (Цвет) - объект, представляющий в сценарии палитру клипа и, соответственно, позволяющий изменять эту палитру;
- Sound (Звук) - объект, представляющий - в сценарии звуковой символ, связанный с кнопкой или клипом;
- Stage (Стол) - объект, предназначенный для управления некоторыми параметрами стола (в частности, масштабом изображения);
- TextField (Текстовое поле) - объект, представляющий в сценарии динамическое текстовое поле или поле редактирования;
- TextFormat (Формат текста) - объект, позволяющий управлять из сценария параметрами шрифта текстового поля.
Между объектами классов Button и MovieClip в ActionScript весьма сложно определить отношения подчиненности: они могут изменяться от 1 фильма к другому и даже от 1 сцены к другой. Например, i 1 сцене кнопка может входить в состав клипа, а в другой - клиг может использоваться для "оживления" изображения кнопки, остальные же объекты класса Movie (за исключением, пожалуй, TextField ) можно считать подчиненными по отношению к объектам Button и MovieClip, поскольку могут входить в их состав, но не наоборот.
Замечание
Обратите внимание, что в ActionScript ни для кадра, ни для сцены фильма не предусмотрен соответствующий класс объектов. Дело в том, что ActionScript не позволяет изменять никакие свойства этих элементов фильма. С помощью сценария Вы можете только обратиться к кадру (сцене) по его имени или номеру, а также проверить, загружен он либо нет. Как правило, кадр или сцена используются в качестве параметров действий (Actions) и методов. Например, чтобы перейти к 20-у кадру, можно записать действие gotoAndPlay(20).
Объекты класса Core предназначены для работы с объектами фильма и носят вспомогательную роль. Их следует использовать в том случае, если стандартных методов оказывается недостаточно для управления (изменения свойств) объектами фильма. В класс Core входят, в частности, следующие объекты:
- Math (Математика) - объект, используемый в сценарии для работы с числовыми величинами; в отличие от всех других классов языка ActionScript, объект Math является и единственным экземпляром этого класса; то есть методы данного класса могут применяться непосредственно к объекту Math; например, чтобы получить значение косинуса с помощью метода cos, можно записать: Math.cos(3)\
- Number (Число) - объект, предусмотренный для выполнения некоторых специальных операций с числовыми величинами; например, с его помощью можно определить наибольшее число в некотором диапазоне;
- String (Строка) - объект, используемый в сценарии для работы со строками;
- Date (Дата) - объект, используемый в сценарии для работы с календарными датами и временем.
Объекты класса Client/Server предназначены для работы с документами (Web-страницами), написанными на языке XML. Некоторые из этих объектов обеспечивают загрузку, обработку и пересылку XML-документов, другие - обслуживают соединения через сокеты. Тем самым ActionScript реализует поддержку серверной обработки XML-документов, содержащих Flash-фильмы.
Объект класса Authoring предназначен для управления параметрами среды разработки Flash-фильмов. Для него предусмотрены 2 основных метода: install и uninstall.
Контекст выполнения сценария
Контекст выполнения сценария определяет доступность и относительные адреса объектов и других программных величин (переменных), используемых в сценарии.
Необходимость учитывать контекст появляется в том случае, если в сценарии используется несколько объектов или переменных с одинаковыми именами. Например, если Вы создадите переменную framePS для хранения скорости воспроизведения основного фильма, а затем - переменную с таким же именем (чего не бывает) для конкретного клипа, то рано или поздно сценарий сработает не так, как предполагалось.
В связи с эти необходимо учитывать следующую особенность ActionScript. Область видимости переменной в нем определяется временной диаграммой, активной в настоящий момент. Например, если в 10-м кадре основного фильма имеется клип, с которым связан сценарий, то все переменные, имеющиеся в этом сценарии, будут влиять на поведение временной диаграммы этого клипа, а не основного фильма. При условии, что в обращении к переменным отсутствует ссылка на временную диаграмму более высокого уровня (как может выглядеть такая ссылка, было сказано в предыдущем разделе).
С каждой временной диаграммой связан специальный параметр - уровень диаграммы (он обозначается с помощью ключевого слова _ level), который определяет ее положение относительно других временных диаграмм, загруженных в Flash-плеер. По умолчанию временная диаграмма основного фильма имеет нулевой уровень. Каждой вызываемой из нее временной диаграмме присваивается уровень, на единицу больший (рис.11.3).
рис.11.3. Иерархия временных диаграмм, загруженных в Flash-плеер
Таким образом, область действия переменных в Flash-фильме распространяется сверху вниз: имя переменной, созданной в сценарии временной диаграммы основного фильма, "видно" в сценарии следующего уровня, если в нем нет своей переменной с таким же именем.
Кроме того, внутри программного блока сценария, ограниченного фигурными скобками, могут объявляться локальные переменные, которые "видны" только в пределах этого блока.
Для управления областью видимости переменных в ActionScript используется понятие "путь назначения" - target path. Путь назначения позволяет указать принадлежность объекта или переменной конкретной временной диаграмме, загруженной в Flash-плеер.
Чтобы правильно записать путь назначения, необходимо учитывать объектную модель ActionScript и взаимное положение временных диаграмм. Например, если Вы хотите указать, что требуется перейти к 10-му кадру основного фильма и воспроизвести его, Вы можете записать такую конструкцию:
Jevel0.gotoAndPlay(l 0).
Возможны 2 варианта указания пути назначения: абсолютный и относительный.
Абсолютный путь вычисляется, как правило, на основе уровня временной диаграммы (как в приведенном выше примере). Указав в качестве отправной точки уровень диаграммы, Вы можете быть уверены, что Flash-плеер правильно отыщет адресата, даже после того, как Вы переместите фрагмент сценария, из которого выполнено обращение.
Относительный путь вычисляется с учетом положения той диаграммы, из которой выполняется обращение. Такой вариант более компактный, но менее надежный. Например, чтобы обратиться к кадру диаграммы, расположенной двумя уровнями выше текущей, можно записать такую конструкцию:
_parent._parent.muClip.
Однако после перемещения клипа, например, на более высокий уровень, относительная ссылка станет некорректной.
Итак, при создании сценариев на ActionScript возможно использование трех типов переменных, различающихся областью видимости:
- глобальные (Global variables), которые доступны в сценарии любой временной диаграммы;
- переменные временной диаграммы (Timeline variables), которые доступны из любой временной диаграммы при условии, что для обращения к ним используется путь назначения (target path);
- локальные (Local variables), которые "видны" только в пределах того программного блока, в котором они объявлены.
Назад | Содержание | Вперёд