Глава 3. Введение в язык ActionScript
Синтаксис языка и комментарии
Подобно JavaScript, язык ActionScript имеет точечный синтаксис. Слева от точки находится объект или ссылка на временную шкалу клипа, а справа – некоторое свойство, путь, переменная или действие, которое относится к элементу в левой части. Например:
· mycar._width = true;
· _root.gotoAndStop(20);
Точка с запятой (;) указывает на конец команды.
Рис. 20. Панель Actions
Хороший стиль программирования подразумевает включение в код программы комментариев. Для этого введите оператор // и добавьте текст с комментарием после него. Например:
// Проверка того, что переменная x больше или равна 4
if (x >= 4) {
// Если да, то начать воспроизведение
// анимации с кадра 10
gotoAndPlay(10);
} else {
// Если нет, то начать воспроизведение
// анимации с кадра 20
gotoAndPlay(20);
}
Чтобы вставить в программу большой текст, можно начать комментарий открывающимся оператором (/*) и закончить закрывающимся оператором (*/).
Типы данных
В языке ActionScript существуют следующие типы данных:
· Булев (или логический) тип данных. Переменная принимает одно из двух значений: true (истина) или false (ложь).
· Числовой тип данных (5; –123; 0.0002).
· Строковый тип данных. Строка – это последовательность буквенных и цифровых символов, а также знаков пунктуации. Строки заключаются либо в двойные (“), либо в одинарные (‘) кавычки (например, str = “Привет!”).
· Объекты – это структура данных с определенными свойствами. Более подробно о встроенных объектах Flash (например, Array, Math, String и др.) см. в § 3.8.
· Клип – отдельный анимационный ролик с собственной временной шкалой (см. § 3.9).
Заметим, что с помощью команды typeof() можно определить тип переменной. Она возвращает следующие значения: boolean, function, movieclip, number, object или string.
Переменные
Имя переменной может состоять из буквенных и цифровых символов, знаков подчеркивания (_) и символов доллара ($). В ней допускается хранение данных любого типа, например:
X1 = –5.6;
_yy = ”Как дела?”;
При этом имя переменной не должно совпадать с ключевыми (зарезервированными) словами языка ActionScript. К ним относятся:
break case continue default delete do | else for function if in instanceof | new return switch this typeof var | void while with |
Чтобы объявить глобальную переменную, которая доступна в любом месте фильма, следует использовать слово «_global», например:
_global.str1 = ”глобальная переменная”;
Для объявления локальной переменной, которая может использоваться внутри функций, применяется ключевое слово «var», например:
function main1() {
var str2 = ”локальная переменная”;
}
При тестировании Flash-фильма можно просматривать текущие значения переменных в окне Output. Для этого в текст программы помещается функция trace(), где в скобках перечислены нужные переменные, например:
trace (str1);
Операторы
Операторы ActionScript можно разделить на следующие группы:
· арифметические операторы (сложение (+), вычитание (–), умножение (*), деление (/), деление по модулю (%), инкрементирование, или прибавление единицы (++), декрементирование, или вычитание единицы (– –));
· операторы сравнения (<, >, <=, >=), возвращается значение true или false;
· логические операторы (НЕ (!), И (&&), ИЛИ (||)), возвращается значение true или false;
· операторы равенства (= =, !=), возвращается значение true или false;
· операторы присваивания (=, +=, –=, *=, /=, %=).
Условные конструкции
Условные конструкции if () или if () … else позволяют проверить условие, заключенное в скобках, и возвращают значение true или false. В зависимости от полученного результата выполняются соответствующие команды.
Рассмотрим пример:
if (x >= 100) {
y = 2 * Math.PI * x;
gotoAndPlay(10);
} else {
y = Math.PI * x * x;
z++;
gotoAndPlay(20);
}
Другая условная конструкция switch()… имеет несколько ветвей, код которых выполняется в зависимости от значения условия, заключенного в круглых скобках.
Рассмотрим пример:
num = 1;
switch(num) {
case 1:
gotoAndPlay(50);
break;
case 2:
gotoAndPlay(100);
break;
default:
gotoAndStop()
}
Ключевое слово break указывает, что будут выполнены только те команды, которые расположены на соответствующей ветви.
Циклы
Оператор цикла while() обеспечивает многократное выполнение набора команд до тех пор, пока условие, заключенное в круглых скобках, возвращает значение true.
while(условие) {
команды;
}
В следующем примере цикл вычисляет значение xy:
z = x;
i = 2;
while (i <= y) {
z = z * x;
i++;
}
В отличие от while() в операторе do…while() команды выполняются хотя бы один раз. Если затем условие оказывается истинным, то команды выполняются снова, в противном случае работа оператора завершается.
do {
команды;
}
while(условие);
В следующем примере цикл также вычисляет значение xy:
z = x;
i = 2;
do {
z = z * x;
i++;
} while (i <= y);
В цикле for() помещается инициализация счетчика, условие и модификация значения счетчика, записанные через точку с запятой:
for(<инициализация счетчика>; <условие>; <модификация значения счетчика>)
{
команды;
}
Рассмотрим пример, где цикл выполняется 50 раз:
for(i = 0; i < 50; i++) {
duplicateMovieClip(“/star”, “star” + i, i);
setProperty(“star” + i, _x, 10 + random(500));
setProperty(“star” + i, _y, 10 + random(350));
setProperty(“star” + i, _alpha, random(100));
}
Функции
Чтобы объявить функцию, используется следующая конструкция:
function имя_функции(аргументы) {
команда(ы);
}
В качестве примера рассмотрим функцию Move_car(), которая перемещает автомобиль на 100 пикселей влево и вниз:
function Move_car(myCar) {
var x = myCar._x;
var y = myCar._y;
myCar._x = x – 100;
myCar._y = y + 100;
}
Чтобы возвратить значение из функции, используется ключевое слово return с последующим указанием чисел или переменных. Для доступа к параметрам функции можно использовать объект Arguments, описанный в § 3.8.
Объекты
Рассмотрим свойства и методы наиболее важных объектов:
1. Arguments – это массив, в котором содержатся значения, передаваемые в качестве параметров функции. Свойства Arguments:
· arguments.length – количество параметров;
· arguments.caller – ссылка на функцию, из которой была вызвана данная функция. Если функция не вызывалась из другой функции, то возвращается null.
2. Array – обеспечивает доступ к массивам и их обработку. Для того чтобы объявить новый массив, используются следующие конструкции:
· days = new Array() – новый пустой массив;
· town = new Array(10) – новый пустой массив, в который можно записать максимум 10 элементов;
· alphabet = new Array(“a”, “b”, “c”, “33”) – новый массив из четырех элементов, заполненный при создании (заметим, что в массиве могут содержаться данные различных типов).
Для доступа к элементу массива в квадратных скобках указывается его индекс (индекс первого элемента – 0, второго – 1 и т. д.):
town[0] = “Moscow”;
Рассмотрим свойства и методы массивов:
· имя_массива.length – количество элементов в массиве;
· имя_массива.concat(элемент1, элемент2, …, элементn) – метод позволяет добавлять дополнительные элементы в конец массива. Например, после выполнения следующих команд массив letter2 будет содержать элементы “a”, “b”, “c”, “d”, “e”:
letter1 = new Array(“a”, “b”, “c”);
letter2 = new Array();
letter2 = letter1.concat(“d”, “e”);
· имя_массива.slice(индекс1, [индекс2]) – создание массива из элементов исходного в диапазоне, который начинается с индекса1 вплоть до индекса2, исключая последний (индекс2 является необязательным параметром; если он не указан, то по умолчанию будет использоваться последний индекс в массиве). Если индекс1 < 0, то отсчет производится с конца массива (–1 – последний элемент, –2 – предпоследний и т. д.).
Например, в результате выполнения следующих команд в массив nums1 заносятся значения 11 и 22:
nums = new Array(11, 22, 33, 44, 55);
nums1 = new Array();
nums1 = nums.slice(0, 2);
· имя_массива.pop() – возвращает последний элемент и удаляет его из массива;
· имя_массива.push(элемент1, элемент2, …, элементn) – добавляет указанные элементы в конец массива;
· имя_массива.shift() – удаляет первый элемент массива и возвращает его значение;
· имя_массива.unshift(элемент1, элемент2, …, элементn) – добавляет указанные элементы в начало массива;
· имя_массива.sort([функция сортировки]) – элементы массива сортируются в определенном порядке. Функция должна сравнивать два числа, возвращать –1, если первое число предшествует второму (1 – наоборот), и возвращает 0 при равных числах. Например, сортировку по возрастанию можно задать следующим образом:
function comp(x, y) {
return x – y; }
myarray.sort(comp);
Если функция сортировки не указана, то вначале идут целые числа, символы верхнего регистра в алфавитном порядке, символы нижнего регистра.
· имя_массива.reverse() – изменяет порядок следования элементов массива на противоположный.
3. Boolean – преобразует выражение в булевую переменную (возвращает значение true, если выражение не ноль, иначе – false). Метод toString() преобразует булевую переменную в строковое представление (“true” или “false”).
4. Button – использует методы и свойства для управления кнопками.
5. Color – установка и преобразование RGB-цветов клипа.
6. Date – служит для хранения и обработки информации о дате и времени. Синтаксис объявления нового объекта Date:
x = new Date();
y = new Date([Параметры]);
Параметры:
· год (четырехзначное число, при этом значения 0–99 соответствуют годам 1900–1999);
· месяц (от 0 (январь) до 11 (декабрь));
· число (от 1 до 31);
· часы (от 0 до 23);
· минуты (от 0 до 59);
· секунды (от 0 до 59);
· миллисекунды (от 0 до 999).
Если параметры не указаны, то в объект Date заносится текущая дата и время. Далее рассмотрим методы, позволяющие устанавливать или возвращать параметры объекта Date:
· getYear() – возвращает год относительно 1900 года;
· getFullYear() – возвращает год в виде четырехзначного числа;
· getMonth() – возвращает месяц (от 0 (январь) до 11 (декабрь));
· getDate() – возвращает день (от 1 до 31);
· getHours() – возвращает часы (от 0 до 23);
· getMinutes() – возвращает минуты (от 0 до 59);
· getSeconds() – возвращает секунды (от 0 до 59);
· getMilliseconds() – возвращает миллисекунды (от 0 до 999);
· getDay() – возвращает день недели (от 0 – воскресенье до 6 – суббота);
· setYear(значение) – задает год в виде двухзначного или четырехзначного числа;
· setMonth(значение) – задает месяц года;
· setDate(значение) – задает число;
· setHours(значение) – задает часы;
· setMinutes(значение) – задает минуты;
· setSeconds(значение) – задает секунды;
· setMilliseconds(значение) – задает миллисекунды;
· toString() – преобразование даты в строку следующего вида: Thu Oct 21 12:47:09 GMT+0400 2010.
7. Key – используется для идентификации нажатий клавиш во время воспроизведения фильма. Методы Key:
· getAscii() – возвращает значение ASCII-кода последней нажатой клавиши (коды Ascii различаются для строчных и прописных букв);
· getCode() – возвращает код последней нажатой клавиши во время воспроизведения клипа. Пример:
new_key = new Object();
new_key.onKeyDown = function() {
trace(“Данные о последней нажатой клавише: ”);
trace(“Код: ” + Key.getCode());
trace(“ascii-значение” + Key.getAscii());
}
Key.addListener(new_key);
· isDown(keyCode) – возвращает true, если клавиша с кодом keyCode нажата, иначе – false.
Свойства объекта Key связаны с кодами клавиш: Key.ENTER (код 13), Key.HOME (код 36), Key.SPACE (код 32), Key.TAB (код 9), Key.ESCAPE (код 27), Key.INSERT (код 45) и др.
8. Math – применяется для обращения к математическим функциям и константам. Рассмотрим методы объекта Math:
· Math.abs(число) – модуль числа;
· Math.min(число1, число2) и Math.max(число1, число2) – мень-шее и большее из чисел;
· Math.pow(число, степень) – возведение числа в некоторую степень;
· Math.exp(выражение) – экспоненциальная функция ex;
· Math.log(выражение) – натуральный логарифм;
· Math.sqrt(выражение) – квадратный корень;
· Math.random() – возвращает случайное число от 0 до 1;
· Math.sin(выражение), Math.cos(выражение) и Math.tan(выра-жение) – тригонометрические функции;
· Math.acos(выражение) и Math.asin(выражение) – арккосинус и арксинус выражений в радианах;
· Math.ceil(выражение) и Math.floor(выражение) – преобразуют вещественное число в ближайшее большее и меньшее целое число;
· Math.round(выражение) – округление числа до ближайшего целого числа.
Также можно использовать математические константы: Math.PI (константа π ≈ 3.14), Math.E (константа e ≈ 2.718), Math.LN10 (натуральный логарифм от 10), Math.SQRT2 (квадратный корень из 2) и др.
9. Mouse – объект, предназначенный для работы с указателем мыши. Методы Mouse:
· Mouse.hide() – скрывает указатель мыши;
· Mouse.show() – показывает указатель мыши.
За позицией указателя мыши можно следить с помощью следующих свойств:
· _xmouse – горизонтальная координата позиции мыши;
· _ymouse – вертикальная координата позиции мыши.
10. MovieClip – предоставляет методы для управления свойствами клипа и его воспроизведением (некоторые свойства рассмотрены в § 3.9 и др.).
11. Number – применяется при проведении вычислений.
12. Object – находится в корне иерархии классов ActionScript. Это универсальный объект, который может использовать методы других объектов.
13. Sound – применяется для управления воспроизведением звука (см. § 3.11).
14. String – применяется для работы со строками. Объявление нового объекта String:
str = new String(“строка”) или str = “строка”;
Свойства и методы String:
· строка.length – число символов в строке. Например, длина строки mystring равна 30:
mystring = “Однажды в студеную зимнюю пору”;
· строка.charAt(индекс) – возвращает символ с указанным индексом (нумерация символов начинается с нуля);
· строка.toUpperCase() – преобразует все символы строки к верхнему индексу. Например, после команды
mystring = mystring.toUpperCase();
значение mystring равно “ОДНАЖДЫ В СТУДЕНУЮ ЗИМНЮЮ ПОРУ”;
· строка.toLowerCase() – преобразует все символы строки к нижнему индексу;
· строка.concat(элемент1, элемент2, …, элементn) – используется для объединения (конкатенации) строк, например:
myName = “Александр”;
fullName = myName.concat(“ ”, “Иванов”);
· строка.indexOf(“подстрока”, [индекс]) – производит поиск подстроки и возвращает индекс ее первого вхождения. Если поиск не закончился успехом, то возвращается –1. Поиск пустой строки возвращает 0. Второй параметр индекс является необязательным, он указывает, с какого индекса следует начать поиск;
· строка.lastIndexOf(“подстрока”, [индекс]) – возвращает номер последней позиции подстроки в строке. Необязательный параметр индекс определяет, с какой позиции начинается поиск;
· строка.slice(начальный_индекс, [конечный_индекс]) – возвращает подстроку в строке по первому и последнему индексу, исключая символ с конечным_индексом. Если конечный_индекс не указан, то по умолчанию это количество символов в строке – строка.length. В следующем примере на экран выводится подстрока “вст”:
str = “Здравствуйте!”;
str1 = str.slice(4, 7);
trace(str1);
15. TextField – используется для управления характеристиками и свойствами экземпляра текстового поля.
16. XML – позволяет создавать, загружать, анализировать и изменять XML-документы.