Приложение. Основы ActionScript


  1. Переменные
  2. Массивы
  3. Условные операторы
  4. Циклы
  5. Функции

1. Переменные

Объявление

Переменная — это величина, имеющая имя и значение. Переменные объявляются с помощью слова var:
var x = 12, y;
Здесь введено две переменных с именами x и y, в переменную x записано значение 12, а переменная y не определена, то есть команда трассировки
trace ( y );
выдаст результат undefined (значение не определено). Такой же результат выдает и команда
trace ( z );
потому что переменная z вообще неизвестна. Для того, чтобы отличить существующую переменную от неизвестной, можно записать в нее специальное нулевое значение null:
var y = null;

Если тип переменной явно не указан, она может принимать любые значения. Например:

var x = 1;    // число
x = "Ку-ку!"; // строка
x = false;    // логическое значение

Однако при объявлении лучше явно указывать тип переменной. Это позволяет обнаруживать многие ошибки еще до выполнения программы. Существует три простых типа:

Тип переменной указывается после ее имени через двоеточие
var x:Number = 0,
    y:String = "qq",
    b:Boolean = false;
В переменные типа String можно записывать символьные строки, заключенные в кавычки или одиночные апострофы:
var s1:String = "qq1", s2:String = 'qq2';
Логические переменные принимают только два значения: true (истина) и false (ложь):
var b:Boоlean = false;
b = true;
b = (a < 2);
В последнем случае значение переменной b будет равно true, если условие справа от знака равенства верно.

Если в переменную попытаться записать значение неверного типа, вы получите сообщение об ошибке сразу при трансляции программы (то есть, при переводе ее в машинные коды), а не во время выполнения. Например, такой код вызывает ошибку:

var x:Number = 1;
x = "Ку-ку!";

Видимость переменных

Различают три вида переменных: Глобальные переменные объявляются с помощью описателя _global:
_global.x = 12;
Обратите внимание, что слово var здесь использовать не нужно, такие переменные рассматриваются как свойства объекта _global. К переменной x, которая объявлена выше, можно обращаться из любой функции и из кода любого клипа просто по имени.

Если в области видимости есть несколько переменных с одним и тем же именем, сначала ищется локальная переменная, затем — переменная текущего клипа, и только потом — глобальная переменная.

Переменные других клипов «не видны», для обращения к ним нужно указывать явно клип-родитель:

mc.x = 1;
_root.x = 12;
_parent.x = 123;

Присваивание

Для присваивания переменной нового значения используется знак =. Слева от него пишут имя переменной, а справа — выражение:
a = 4*(c + 2) + 3 / (r - 4*w) + d % 3;
Знак * обозначает умножение, знак / — деление, а % — взятие остатка от деления.

В выражении арифметические операции выполняются в следующем порядке:

Этот порядок называется приоритетом (старшинством) арифметических операций.

Символьные строки можно «сцеплять» с помощью оператора +:

no = 20;
s = "Вася " + "пошёл гулять.";
qq = "Объект" + no;
Если в выражении участвуют разнотипные данные, происходит автоматическое преобразование к одному типу. Так в последней строке в переменную qq записывается строка Объект20.

Очень часто в программах используют операторы ++ (инкремент, увеличение переменной на 1, и -- (декремент, уменьшение переменной на 1). Операторы

i ++; k --;
означают то же самое, что
i = i + 1;  k = k  - 1;
Существует также сокращенная запись арифметических операций:
a += 20;   b -= c - d;   c *= a + b;   d /= 2*c;   f %= 12;
Этот код можно заменить на такие операторы в «нормальной» форме:
a = a + 20;
b = b - (c - d);
c = c * (a + b);
d = d / (2 * c);
f = f % 12

Объекты

Объект — это нечто, имеющее свойства и методы. В среде Flash существуют встроенные объекты (например, Array, MovieClip, Key). Кроме того, можно строить свои объекты:
var car = new Object();
car.v = 10;
car.year = 1998;
В среде Flash можно использовать объектно-ориентированное программирование, то есть создавать свои классы объектов, наделять их свойствами и методами (см. Тему 13).

Главная особенность объектов — это так называемая ссылочная адресация. То есть, при объявлении

var obj = new Object();
переменная obj хранит не сам объект, а только его адрес (ссылку на объект). Поэтому оператор присваивания
obj2 = obj;
не создает в памяти новый объект, который является копией объекта obj, а просто копирует адрес первого объекта в переменную obj2. После этого obj и obj2 указывают на один объект. Если мы хотим действительно построить копию объекта, адрес которого хранится в obj, можно сделать так:
var obj2 = new Object();
for ( prop in obj ) obj2[prop] = obj[prop];
Здесь в цикле перебираются все свойства первого объекта и копируются во второй. Переменная prop (символьная строка) — это название очередного свойства. Запись obj[prop] означает «свойство объекта obj, название которого хранится в prop».
к началу К началу страницы

2. Массивы

Основные понятия

Массив — это набор элементов, имеющих общее имя. Каждый элемент имеет собственный номер, начиная с нуля. Для обращения к элементу массива используются квадратные скобки.
  Нумерация элементов массива с нуля непривычна для обычных людей, но широко используется в программировании (языки Си, JavaScript, Java, ActionScript).
В отличие от многих языков программирования, в одном массиве могут быть разнотипные элементы: целые числа, вещественные числа, строки, логические переменные.

Массив из трех элементов можно объявить и заполнить так:

A = new Array(3);
A[0] = 12;
A[1] = 4.56;
A[2] = "Ку-ку!";
или так:
A = new Array (12, 4.56, "Ку-ку!");
или так:
A = [12, 4.56, "Ку-ку!"];

Копирование

При работе с массивами, как и с другими объектами (кроме чисел, строк и логических переменных), есть один тонкий момент. Рассмотрим пример кода:
A = [1, 2, 3];
B = A;
B[1] = 99;
trace(A);
Здесь создается массив A, затем он копируется в массив B. Потом изменяется B[1] и массив A выводится в окно Output. Вроде бы массив A не должен измениться, однако мы увидим в окне Output строчку:
1,99,3
Почему же изменился массив A? Дело в том, что оператор B=A НЕ создает новый массив, а просто копирует в B адрес массива A, то есть A и B обращаются к одной области памяти. Поэтому, изменив B, мы изменили и A. Чтобы действительно создать копию массива, нужно заменить оператор B=A на код
B = new Array();
for(i=0; i<A.length; i++) B[i] = A[i];
Здесь используется встроенное свойство length объекта Array — длина массива.

Многомерные массивы

Элементом массива может быт другой массив:
A = new Array();
A[0] = [1, 2, 3];
A[1] = [4, "Вася"];
A[2] = [true, "qq", 4];
В таком (двухмерном) массиве каждый элемент имеет два индекса. Например, A[1][0] имеет значение 4, а A[2][1] — это символьная строка qq.

Методы

Для работы с массивами можно использовать следующие встроенные методы класса Array:
к началу К началу страницы

3. Условные операторы

Условные операторы используются для выбора одного из двух вариантов. Полная форма оператора:
if ( условие ) {
  ... // блок if
} else {
  ... // блок else
}
Если условие  истинно, выполняется блок if, а если ложно — блок else. В каждом из них можно размещать любые операторы. в том числе и другие условные операторы.

Второй блок (начиная со слова else) может отсутствовать. При этом если условие не выполняется, никаких действий не будет. Такая форма называется неполной формой условного оператора:

if ( условие ) {
  ... // блок if
}
Если внутри фигурных скобок стоит всего один оператор, скобки можно не ставить.

Простейшие условия — это отношения

Например,
if ( x < 0 ) {
  trace ( "x отрицательный" );
} else {
  if ( x == 0 ) {
    trace ( "x равен 0" );
  } else {
    trace ( "x положительный" );
  }
}
Здесь используется вложенный условный оператор (один внутри другого).

Сложные условия образуются из простых (отношений) с помощью логических операций:

Операции выполняются в следующем порядке: Этот порядок называется приоритетом (старшинством) логических операций. Например
a = 1; b = 2; c = 3;
if ( a < b  &&  a < c )
  trace ( "a - наименьшее" );
if ( b > a  ||  b > c )
  trace ( "b - не наименьшее" );
Оба условных оператора здесь сработают и в окно Output будут выведены оба сообщения.
к началу К началу страницы

4. Циклы

Цикл — это многократное повторение последовательности действий. Существуют циклы с известным числом шагов и циклы с условием.

Цикл с переменной

Цикл с известным числом шагов (или цикл с переменной) имеет вид
for ( начальные значения; условие; изменения )  {
  ...  // тело цикла
}
В заголовке цикла три части, разделенные точками с запятой. Операторы в первой части выполняются один раз при входе в цикл.

В цикле выполняются все операторы, расположенные внутри фигурных скобок (в теле цикла). Если там всего один оператор, скобки можно не ставить. Цикл работает до тех пор, пока условие в заголовке цикла не станет ложным.

После каждого шага цикла выполняются операторы, записанные в третьей части (изменения).

В цикле

for ( i=0; i<10; i++ )
  trace ( i );
в окно Output выводятся в столбик числа от 0 до 9 включительно. Действительно: Переменная i в таком цикле называется переменной цикла.

Цикл с переменной часто используют для обработки массивов, при этом i обозначает номер элемента:

A = [1, 2, 3];
for ( i=0; i<A.length; i++ )
  A[i] *= 2;
Этот цикл умножает все элементы массива A на 2.

Циклы с условием

Цикл с условием начинается ключевым словом while, после которого в скобках записывают условие продолжения работы цикла:
while ( условие ) {
  ...
}
Цикл заканчивается, когда условие становится ложным. Например:
i = 0;
while ( i < 10 ) {
  trace ( i );
  i ++;
}
Этот цикл, так же, как и в предыдущем примере, выводит числа от 0 до 9.

Если условие всегда истинно, программа зацикливается (будет работать бесконечно долго). Например, часто забывают изменять переменную в теле цикла:

i = 0;
while ( i < 10 ) {
  trace ( i ); // зацикливание!!!
}
Проверка условия стоит в начале цикла (цикл с предусловием), поэтому он ни разу не выполняется, если условие неверно при входе в цикл.

Если в теле цикла стоит один оператор, фигурные скобки можно не ставить.

Цикл с постусловием отличается тем, что проверка условия выполняется после очередного шага:

do {
  ...
}
while ( условие );
Такой цикл всегда выполняется хотя бы один раз.

Перечисление свойств

Особый вид цикла используется для перечисления всех свойств объекта:
for ( var переменная in объект ) {
  ...
}
В этом цикле переменная «проходит» все свойства объекта, ее значение на каждом шаге — название очередного свойства. Например, цикл:
var obj = new Object();
obj.x = 10;
obj.y = 20;
for ( var prop in obj ) {
   trace ( prop + " = " + obj[prop]);
}
выведет в окно Output названия свойств, x и y, и их значения:
x = 10
y = 20

Управление циклом

Для изменения порядка выполнения цикла используются два оператора: Например, цикл
for ( i=0; i<10; i++ ) {
  trace ( i );
  if ( i >= 3 ) break;
}
выполнится только 4 раза.

Другой цикл

for ( i=0; i<10; i++ ) {
  if ( i >= 3 ) continue;
  trace ( i );
}
выполнится 10 раз, но в окно Output будут выведены только числа 0, 1 и 2.
к началу К началу страницы

5. Функции

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

Функции объявляются с помощью слова function:

function qq() {
  ...
}
Имя этой функции — qq, при ее вызове qq(); выполняются все команды внутри фигурных скобок. Многоточие здесь и далее означает любой код на ActionScript.

Функция может принимать параметры или аргументы — дополнительные данные, которые влияют на ее работу. Параметры перечисляются через запятую в скобках:

function qq ( x ) { ... }
function ww ( x:Number, s:String ) { ... }
Функция qq принимает один параметр, его тип может быть любой. Функция ww принимает два параметра, причем их типы жестко заданы: первый — число, второй — символьная строка.

Функция может возвращать результат (число, строку, логическое значение и т.д.) с помощью оператора return. Например:

function Sum ( x, y ) {
  var s = x + y;
  return s; // или return x + y;
}
Чтобы использовать это значение, надо записать его в переменную:
w = Sum ( 2, 3 );
trace ( w );

Типы функций

Функции, так же, как и переменные, бывают трех типов: Чаще всего используют функции клипов. Например, если в одном из кадров главной временной шкалы объявлена функция
function qq () { ... }
с другой временной шкалы (из обработчика другого клипа) она вызывается как _root.qq().

Ту же функцию можно объявить по-другому:

qq = function() { ... }
При этом фактически создается переменная типа «ссылка на функцию» и в нее записывается адрес кода. Разница (в сравнении с первым способом) состоит в том, что в переменную qq можно потом записать адрес другой функции:
qq = function () { trace(1); }
qq();
qq = newFunc;
qq();
function newFunc () { trace ( 2 ); }
Если в первый раз при выполнении оператора qq() вызывается первая (безымянная) функция, то второй раз — функция newFunc. Заметим, что после присваивания qq=newFunc к первой функции уже никак не обратиться — ее адрес потерян.

Глобальные функции объявляются с помощью слова _global:

_global.qq = function ( x ) { ... }
Эту функцию можно вызывать просто как qq() из любого места программы, в том числе из обработчиков событий клипов.

Локальные функции объявляются внутри другой функции и известны только там. В примере

trace(b);
a();
function a() {
  function b() {}
  trace(b);
}
функция b — локальная для функции a, поэтому первый вызов trace(b) даст результат undefined (не определено), а второй (изнутри функции a) — [type Function], то есть, найдена функция с таким именем.

Обработчики событий

Обработчики событий — это специальные методы кнопок и клипов. Например, вместо определения обработчика события on(release) можно записать адрес нужной функции в свойство onRelease кнопки или клипа.

Пусть на текущем монтажном столе есть кнопка с именем btn (имя кнопки задается в левой части на панели Properties). Разберем такой код:

btn.onRelease = function () {
   trace("q");
   btn.onRelease = second;
}
function second() {
   trace("qq");
   btn.onRelease = null;
}
Вначале обработчик события кнопки — это безымянная функция, которая выводит на экран букву q и, кроме этого, меняет обработчик события на адрес функции second.

При втором щелчке вызывается функция second, которая выводит две буквы q и уничтожает обработчик, записывая в него null. На последующие щелчки кнопка не будет реагировать.

к началу К началу страницы

 Всякая всячина Назад В начало Оглавление


© 2007  К. Поляков


Сайт создан в системе uCoz