ActionScript - это объектно-ориентированный язык написания сценариев во Flash. Он применяется для управления объектами или добавления в фильмы Flash интерактивности (возможностей взаимодействия с пользователем). Сценарии ActionScript могут быть встроены в экземпляры видеоклипов, кнопок и кадров.
ActionScript - модульный язык программирования, т.е. сценарии на этом языке являют собой небольшие относительно автономные модули, выполняющие строго определённые функции. Программа на ActionScript состоит из коротких сценариев, относящихся к отдельным кнопкам, клипам и кадрам.
В простейшей форме сценарий ActionScript представляет собой набор простых команд (инструкций) для управления проигрывателем Flash. Выполнение сценария происходит при наступлении определённого события (нажатие клавиши на клавиатуре, движение мыши и т.п.). Команды могут быть определены в ключевом кадре, внутри обработчика событий кнопки on() или внутри обработчика событий видеоклипа onClipEvent(), т.е. код сценария может располагаться в ключевом кадре временной шкалы, объекте Button или объекте Movie Clip.
Механизм, который указывает Flash, какое действие следует выполнить при наступлении определённого события, называется обработчиком событий.
Единственным событием, связанным с ключевым кадром временной шкалы, является переход к нему в ходе воспроизведения фильма. В этом случае, выполняются действия, размещённые в этом кадре (инициация и изменение значений переменных, вызов функций и т.п.).
События, связанные с объектом Button (Кнопка)
Формат обработчика событий для экземпляров кнопок:
on (событие)
{
действия
}
События, связанные с объектом MovieClip (видеоклип)
Формат обработчика событий для экземпляров видеоклипов:
onClipEvent (событие)
{
действия
}
В среде Flash существует специальный элемент интерфейса, позволяющий добавлять интерактивные команды в фильмы Flash - это панель Actions (Действия). Открыть её можно несколькими способами:
![]() |
Добавлять действия во Flash можно в двух режимах: обычном (Normal) и экспертном (Expert). По умолчанию используется обычный режим. Выбор режима осуществляется в меню параметров панели.
Суть обычного режима состоит в назначении действий ключевым кадрам и кнопкам путём выбора их из раскрывающихся меню и назначении для них параметров в области задания параметров с помощью имеющихся значений или ввода значений в опции поля вручную. В обычном режиме невозможно вручную набирать текст в окне сценария.
В экспертном режиме можно набирать коды на клавиатуре прямо в правой части панели, а также вставлять туда коды из папок действий в левой части панели Actions.
Действия в окно сценария ActionScript можно добавлять тремя способами.
Одной из важных характеристик ActionScript является контекстно-зависимая природа переменных. При их объявлении не указывается тип; при исполнении сценария система автоматически распознаёт тип данных, хранящийся в той или иной переменной. Поэтому, выражения "n = = 3" и "n = = "3"" оказываются истинными одновременно, а если случайно присвоить массиву числовое значение, искать ошибку придётся долго.
В то же время, преобразования не универсальны, и иногда ошибки могут возникать из-за того, что разработчик не учёл невозможность преобразования типов (например, взял в кавычки ссылку на объект).
Имя переменной ActionScript содержит латинские буквы, цифры, знаки доллара и подчёркивания. Имя переменной не может начинаться с цифры, совпадать с ключевым словом и содержать пробелы. Регистр не учитывается.
Каждая переменная имеет свою область видимости, или границы, в пределах которых она будет объявлена. В ActionScript существует три вида области видимости: временная шкала, локальная область, глобальная область.
Переменные временной шкалы объявляются путём присвоения конкретных значений, например: n = 3. Область видимости такой переменной совпадает с той временной шкалой, где она объявлена. Для получения доступа к переменной этого типа из другой временной шкалы следует указать целевой путь (см Адресация).
При объявлении переменной с помощью ключевого слова var образуется локальная переменная: var n = 3. Локальная переменная может реально объявляться только внутри функции. Использование локальных переменных позволяет избежать конфликтов имён, что очень актуально в условиях возможности объявлять переменные в любой точке программы.
Глобальные переменные появляются в Flash MX. Для введения глобальной переменной используется идентификатор _global, например: _global.n = 3. Такая переменная доступна из любой области видимости без указания целевого пути.
Типы данных:
Если попытаться получить доступ к переменной, которая не объявлена или же которой не присвоено значение, переменная получает специальное значение undefined. Обычно это происходит в случае синтаксических ошибок. Поэтому, для инициализации переменной в случае отсутствия альтернативы используется специальное значение null. Если тип null преобразуется в строковое значение, он получает значение пустой строки; если в число - 0, если в булево значение - false.
Категория | Оператор | Наименование | Пример |
Математические операторы | + | Сложение | x + y |
- | Вычитание | x - y | |
* | Умножение | x * y | |
/ | Деление | x / y | |
% | Деление по модулю (остаток) | x % y | |
++ | Инкремент | x++ | |
-- | Декремент | x-- | |
- | Унарный минус | -x | |
Операторы присваивания | = | Присваивание | x = y |
+= | Присваивание результата добавления значения | x += y | |
-= | Присваивание результата вычитания значения | x -= y | |
*= | Присваивание результата умножения на значение | x *= y | |
/= | Присваивание результата деления на значение | x /= y | |
%= | Присваивание результата деления с остатком | x %= y | |
Операторы сравнения | == | Равно | x == y |
!= | Не равно | x != y | |
< | Меньше | x < y | |
> | Больше | x > y | |
<= | Меньше или равно | x <= y | |
> | Больше или равно | x >= y | |
=== | Строгое равенство (без автоматического преобразования типов) | x === y | |
!== | Строгое неравенство | x !== y | |
Логические операторы | && | И | x && y |
|| | ИЛИ | x || y | |
! | НЕ | !x | |
Операторы доступа | [] | Доступ к элементам массива | a[i] |
. | Доступ к свойствам и методам | Mc1._x |
Действия (Actions) в ActionScript - это команды, задающие поведение того или иного элемента фильма. Ниже приведены действия ActionScript, наиболее часто применявшиеся при разработке курса.
Формат:
if (условие)
{
действия1
}
else
{
действия2 }
Формат:
while (условие)
{
действия }
Формат:
for (начальное значение; условие; изменение)
{ действия }
Способы указания целевого кадра:
Формат: trace(переменная)
Объявление пользовательской функции начинается служебным словом function, за которым следует имя функции. Имя функции может содержать буквы, цифры, знаки подчёркивания и доллара, не должно содержать пробелов, начинаться с цифры или совпадать с ключевыми словами ActionScript. За именем функции следует список параметров, заключённый в круглые скобки. Параметры перечисляются через запятую. Их может не быть, но круглые скобки обязательны. Тело функции заключается в фигурные скобки.
Функция может возвращать не возвращать значений или возвращать одно значение. Этот процесс реализуется с помощью ключевого слова return, например: return m. После выполнения инструкции, содержащей команду return, выполнение функции завершается.
В ActionScript допустимо использование рекурсивных функций.
Рекомендуется использовать в функциях только локальные переменные.
Пример
function sign(a) //возвращает знак a
{
if (a==0) {return 0}
else if (a<0) {return -1}
else {return 1}
}
...
k=99
b=sign(k) //1
c=sign(-200) //-1
function min(arr)
//возвращает наименьший элемент массива
{
var w=arr[0]
for (var i=0; i< arr.length; i++)
{
if (arr[i]<w) { w = arr[i] }
}
return w
}
...
k=new Array(1,2,13,-6,-9,9,0)
b=min(k) //-9
Существует несколько способов создания массивов
В языке ActionScript не требуется предопределять число элементов массива. Элементы одного массива могут иметь различный тип данных.
Нумерация элементов массива начинается с нуля.
Для доступа к элементу массива используется оператор квадратные скобки [].
В ActionScript возможно создание многомерных массивов. Однако, оно заметно отличается от создания многомерных массивов в других языках программирования.
Пример
// создаём конструктор для объектов Dot
function Dot (nm, cx, cy) {
this.name=nm
this.x=cx
this.y=cy
}
// создаём массив
dots = new Array()
//заполняем массив объектами Dot
dots[0] = new Dot("O",0,0)
dots[1] = new Dot("A",312,315)
...
line = dot[1].name + dot[0].name //Результат: line="AO"
Объект Array имеет доступное только для чтения свойство length (длина), принимающее целое значение, равное числу элементов массива. Доступ к свойству length осуществляется с помощью оператора точка: a.length
Для преобразования массива в строку используется метод join(). Он возвращает строковое значение элементов массива, отделенных друг от друга определён-ным разделителем. Строковое значение, переданное методу в качестве параметра, используется для разделения элементов массива во вновь сформированной строке. По умолчанию (если параметры не передаются) в качестве разделителя использу-ется запятая. Обратным методом является метод split() объекта String.
Сортировка массивов осуществляется методами sort() и sortOn().
Метод sort() упорядочивает элементы одномерного массива по возрастанию их значений в коде ASCII. В качестве необязательного параметра метода выступает ссылка на функцию, задающую правила сортировки.
Примеры
1 Использование метода sort() без параметра:
nums = new Array(35, 299, 1, 9)
nums.sort()
trace(nums) //Результат: 1, 299, 39, 9
2 Использование метода sort() с параметром:
nums = new Array(35, 299, 1, 9)
nums.sort(Sorter)
trace(nums)
...
function Sorter(a,b)
{ return a-b }
Метод sortOn() используется для сортировки ассоциативных массивов.
Если с помощью кода ActionScript необходимо получить доступ к методам или свойствам экземпляра объекта Movie Clip, следует знать, как их найти, или каким образом выполнить адресацию. В ActionScript используется два вида адресации - абсолютная и относительная.
При абсолютной адресации указывается полный путь к объекту. Наиболее употребительным обозначением основной временной шкалы является имя _root.
При относительной адресации указывается путь к объекту относительно другого объекта. Для обозначения верхнего по отношению к вызываемому уровня в иерархии используется слово _parent.
При обращении к экземпляру видеоклипа может быть использован оператор квадратные скобки [].
Примеры
Свойства - это характеристики фильмов и видеоклипов (такие, как ширина и высота), значения которых можно узнать и задать. Каждый экземпляр видеоклипа имеет изменяемые свойства, от которых зависят его внешний вид, размеры и положение на рабочем поле. Некоторые свойства видеоклипа доступны только для чтения, т.е. изменить их значение невозможно.
Перед названием каждого свойства ставится символ подчеркивания. Для доступа к свойству используется оператор точка.
Формат:
Описание свойств объекта MovieClip приведено в таблице 2. Все они доступны для чтения. Символ "W" в графе "Запись" напротив названия свойства означает, что его значение можно изменять с помощью команд ActionScript (версии Flash 5 и выше).
Таблица 2. - Свойства Flash-фильмов и видеоклиповКатегория | Свойство | Запись | Описание |
Позиция | _x | W | Определяет горизонтальное расстояние между центральной точкой видеоклипа и левым верхним углом рабочего поля, на котором он находится. Значение измеряется в пикселях. |
_y | W | Определяет вертикальное расстояние между центральной точкой видеоклипа и левым верхним углом рабочего поля, на котором он находится. Значение измеряется в пикселях. | |
_xmouse | Определяет расстояние по горизонтали (в пикселях) между нулевой точкой видеоклипа (фильма) и текущим положением курсора мыши. | ||
_ymouse | Определяет расстояние по вертикали (в пикселях) между нулевой точкой видеоклипа (фильма) и текущим положением курсора мыши. | ||
_rotation | W | Определяет величину поворота видеоклипа в градусах. Отсчёт начинается от вертикальной оси. | |
Размеры | _xscale | W | Определяет ширину экземпляра видеоклипа (фильма). Значение свойства измеряется в процентах от ширины исходного символа. |
_yscale | W | Определяет высоту экземпляра видеоклипа (фильма). Значение свойства измеряется в процентах от ширины исходного символа. | |
_width | W | Определяет ширину (в пикселях) экземпляра видеоклипа (фильма). | |
_height | W | Определяет высоту (в пикселях) экземпляра видеоклипа (фильма). | |
Внешний вид | _alpha | W | Определяет степень прозрачности видеоклипа или фильма. Значение измеряется в процентах. 100% означает, что видеоклип полностью непрозрачен. |
_visible | W | Значение относится к логическому типу данных и определяет, виден экземпляр (true) или скрыт (false) | |
Внутренний путь | _name | W | Возвращает или переназначает имя экземпляра видеоклипа |
_target | Возвращает корректную строку, которую можно использовать для ссылки на экземпляр видеоклипа. | ||
_droptarget | Возвращает имя и абсолютный путь последнего видеоклипа, над которым был отпущен перетаскиваемый видеоклип | ||
Внешний путь | _url | Возвращает полный путь к фильму Flash (swf-файлу), в котором выполняется действие. | |
Временная шкала | _currentframe | Возвращает номер текущего кадра фильма или экземпляра видеоклипа. | |
_totalframes | Возвращает общее количество кадров, находящихся на временной шкале фильма или экземпляра видеоклипа. | ||
_framesloaded | Возвращает количество кадров, которые загружены из сети. |
В Flash версии MX и выше методы объектов MovieClip позволяют реализовать самые разные функции: от управления временной шкалой до рисования средствами ActionScript. Спектр методов, совместимых с Flash 5, значительно уже.
Методами управления воспроизведением на временной шкале являются play(), stop(), gotoAndPlay(), gotoAndStop(), nextFrame() и prevFrame(). Описание первых четырёх приводятся в п. "Действия и операторы". Два последних метода используются для перемещения к последующему или предыдущему ключевому кадру временной шкалы соответственно и не требуют параметров.
Объекты MovieClip содержат методы, позволяющие образовывать копии объектов MovieClip средствами ActionScript. С программным созданием этих объектов связано понятие глубины.
Все графические объекты, созданные программным путём, размещаются в специальном слое объектов, созданных средствами ActionScript. Этот слой располагается над всеми остальными слоями Flash-фильма и содержит дополнительные подслои, обозначаемые глубиной. Таким образом, глубина объекта - целое значение, определяющее его размещение по оси аппликат относительно остальных элементов в данном слое (это означает, что объект с меньшей глубиной при наложении перекрывается объектом с большей глубиной). На определённой глубине может находиться только один объект. Если не принять во внимание эту особенность, объекты с одинаковой глубиной будут перезаписывать друг друга.
Метод duplicateMovieClip() используется для создания копии экземпляра MovieClip. Новый объект приобретает многие свойства исходного с аналогичными значениями и располагается на той же временной шкале. Впоследствии свойства нового объекта можно изменить.
Существует два способа записи копирования видеоклипов:
Здесь mcObject - имя существующего экземпляра видеоклипа, newObjectName - имя нового экземпляра видеоклипа, depth - глубина.
Если объект MovieClip, созданный с помощью метода duplicateMovieClip(), уже не нужен, целесообразно освободить от него память. Для удаления дублированных объектов используется метод removeMovieClip(). Здесь также существует два способа записи:
Здесь newObject - удаляемый объект.
Для определения глубины объекта MovieClip используется метод getDepth(), не требующий параметров и возвращающий числовое значение глубины объекта.
В Flash версии MX и выше появляется возможность программно создавать текстовые поля с помощью метода createTextField(), но в Flash 5 она отсутствует.
Программное рисование впервые вводится в Flash MX.