4.6. Объекты, их свойства и методы

Объекты ActionScript можно рассматривать как специальные типы переменных. Для создания любого объекта используется оператор new с именем объекта. Каждый объект может иметь свои свойства и методы. Например, объект Date имеет метод getDate, с помощью которого можно узнать текущую дату. Однако этот метод нельзя применить к обычной переменной или объекту другого типа. Проводя бытовую аналогию, можно сказать, что, например, находящийся в комнате объект "проигрыватель компакт-дисков" имеет метод "перемотка вперед". Применить этот метод к объекту "телевизор" нельзя.

В этом разделе мы кратко познакомимся с объектами ActionScript и назначением их основных методов.

Массивы
Начнем с объекта Array (Массив). Он предназначен для работы с массивам и, данных. Интересно, что, несмотря на отсутствие в предыдущей версии Flash этого объекта флэшеры все равно использовали массивы, эмулируя их с помощью переменных с вычисляемыми именами. Однако этот метод требует много памяти и ресурсов компьютера, поэтому даже тем, кто привык к нему, работая с предыдущей версией программы Flash, сейчас от него лучше отказаться.

Для создания массива используется следующий оператор:

arr = new Array();

Здесь вместо идентификатора arr можно использовать любое имя переменной. После этого к элементам массива можно обращаться следующим обазом:

arr [0] = 3;
arr [1] = 40;

Как видите, индексы элементов массива записываются в квадратных скобках, как это и принято в большинстве языков программирования. Интересно, что индексы могут принимать любые целочисленные значения, не обязательно последовательные. При этом считается, что все "промежуточные" значения не определены.

Длину массива можно узнать с помощью метода length. Оператор

q = arr.length;

присвоит переменной q значение, равное длине массива arr. Запись обращения к методу всегда одинакова: после имени объекта ставится точка и после нее - имя метода.

К существующему массиву можно добавить новый элемент с помощью метода push. Элемент добавляется в конец массива. Например, код

arr.push (34);

добавит в конец массива новый элемент со значением 34.

Метод pop позволяет, напротив, удалить последний элемент массива. Можно также удалить или добавить элемент в начало массива с соответствующим сдвигом остальных элементов. Для этого существуют методы shift и unshift.

Оператор

arr.shift ();

удалит первый элемент массива (с индексом 0). Второй элемент при этом станет первым, третий - вторым и так далее.

Для объединения нескольких массивов в один существует метод concat, a для превращения массива в строку - метод toString. Например, если написать так:

arr = new Array ();
arr[0] = 10;
arr[1] = 400;
arr[2] = 1980;
q = arr.toString ();

то переменной q присваивается строковое значение "10,400,1980".

Вообще говоря, вместо запятой в качестве разделителя элементов может использоваться любой символ. Для этого вместо метода toString следует использовать метод join. В скобках при этом можно указать требуемый разделитель, например, так:

q = arr.join (&);

При этом переменной q присваивается строковое значение "10&400&1980".

Если возникла необходимость выделить из массива какую-либо область, с этим можно справиться с помощью метода slice. Этот метод "вырезает" фрагмент массива (для него необходимо указать индексы первого и последнего i элементов вырезаемого фрагмента) и создает новый массив. При этом старый массив остается нетронутым. Например, если написать

arr = new Array ();
for (i = 0; i < 40; i++) {
arr[i] = i*10;
}
a = arr.slice (6, 8);

произойдет следующее. Сначала создается массив arr, затем он заполняется 40 элементами, имеющими индексы от 0 до 39 и значения от 0 до 390. Затем создается новый массив с именем а, в который записываются значения элементов, имеющих в массиве arr индексы 6 и 7.

Весьма гибко управлять содержимым массива позволяет метод splice. Он удаляет из массива указанное количество элементов, начиная с указанного индекса. Кроме того, одновременно на это же место можно вставить несколько элементов. Для иллюстрации несколько изменим предыдущий пример:

arr = new Array (20);
for (i = 0; i < 40; i ++) {
arr [i] = i*10;
}
arr.splice (6, 10, 456);

Этот код вначале создает и заполняет массив так же, как в предыдущем примере, а затем удаляет из него 10 элементов (начиная с индекса 6), а затем вставляет элемент со значением 456 на место с индексом 6.

Для сортировки элементов массива по алфавиту можно использовать метод sort, а для расположения элементов массива в обратном порядке - метод reverse.

На этом можно закончить знакомство с объектом Array и перейти к другим объектам.

Управление цветом
Объект Color (Цвет) позволяет гибко управлять цветом мувиков. Каждый объект Color строго привязан к одному из имеющихся в ролике экземпляров мувиков. Например, если создать мувик, содержащий, к примеру, синий круг, и поместить в ролик его экземпляр с именем example, то для программного управления его цветом можно создать объект Color с любым именем например, а:

а = new Color (example);

Как видите, имя целевого мувика указывается уже при создании объекта.После этого с помощью свойств и методов объекта а можно управлять цветом экземпляра мувика с именем example.

Управление цветом осуществляется с помощью методов setRGB и setTransform. Для получения текущего цвета можно воспользоваться свойствами getRGB и getTransform.

Свойство getRGB возвращает значение, соответствующее эффекту Tint (Оттенок). Имейте в виду, что для последующего использования этого свойства цвет экземпляра следует задавать только и режиме Tint (Оттенок) на панели Effects (Эффекты). В этом случае можно получить значение текущего цвета следующим образом:

сol = a.getRGB ();

При этом переменной col присваивается числовое значение, соответствующее номеру цвета. Точно таким же образом, с помощью номера цвета, можно задавать цвет мувика, используя метод setRGB.

Числовое значение цвета удобно задавать в шестнадцатеричном формате. В этом случае можно считать, что мы имеем дело с шестиразрядным числом, старшие два разряда которого означают величину красной составляющей цвета, следующие два - зеленой составляющей и младшие два - синей. Чтобы число считалось шестнадцатеричным, в языке ActionScript следует поставить перед ним префикс 0х. Таким образом, число 0xFF0000 соответствует чистому красному цвету, 0x00FF00 - зеленому и 0x0000FF - синему. Аналогично, значение 0х880000 означает темно-красный цвет, 0xFFFFFF - белый, 0х888888 - серый и так далее.

Зная это, можно легко методом setRGB превратить наш синий круг в красный:

а.setRGB (0xFF0000);

А вот как можно заставить цвет мувика изменяться постепенно:

a = new Color (example);
a.setRGB(i);
i += 1;
if (i > 0xFFFFFF) stop();

При этом во втором кадре следует написать

gotoAndPlay(1);

для того чтобы заставить первый кадр выполняться циклически. Как видите, в этом примере мы воспользовались тем, что первоначальное значение не определенной заранее переменной - 0. В этом примере цвет мувика изменяется постепенно, пока из черного не станет белым. Правда, в данном случае эта "постепенность" выглядит не особенно убедительно, поскольку, Например, после ярко-синего (0x0000FF) цвет снова станет почти черным (0х000100). Однако сейчас нам важен сам принцип.

Программная настройка свойств
Управление объектом Color с помощью методов setTransform и getTransform несколько сложнее. Для начала посмотрим, какое значение нам возвращает метод getTransform. Второй кадр нашего примера мы пока удалим, а в первый вставим такой код:

a = new Color (example);
b = a.getTransform ();

Если принять во внимание, что синий цвет нашего мувика был заранее изменен эффектом Tint (Оттенок) на красный, то, просмотрев ролик и нажав клавиши CTRL+ALT+V, мы увидим следующее:

Level #0:
Variable _level0.$version = "WIN 5,0,30,0"
Variable _level0.a = [object #1] {}
Variable _level0.b = [object #2] {
ra : 0,
rb : 200,
ga : 0,
gb : 0,
ba : 0,
bb : 0,
aa : 100,
ab : 0
}

Итак, свойство getTransform возвращает не обычное числовое или строковое значение, а объект. У этого объекта есть такие свойства, как rа, rb, gа и так далее. Их значения, кстати, в точности соответствуют значению полей вспомогательной панели Effects (Эффекты) при выбранном эффекте Advanced (Расширенный).

Если помните, здесь больше возможных комбинаций значений, чем число цветов. Для каждой цветовой составляющей, а также для показателя прозрачности, здесь можно задать смещение либо в процентах (от -100% до 100%), либо в абсолютном виде (от-255 до 255). В объекте, возвращенном методом getTranstorm, относительное смещение в процентах задают свойства rа, gа, ba и aa (соответственно, для красной, желтой, синей составляющих и для прозрачности). Абсолютное смещение задают свойства rb, gb, bb и ab.

Возникает естественный вопрос: а как же пользоваться методом setTransform? Очевидно, при нем нужно указать в скобках значения этих же свойств некоторого объекта. Никакого "специального" объекта для этой цели в языке ActionScript не существует, нужно пользоваться объектом "общего назначения" Object. Например, если мы хотим программно сделать мувик наполовину прозрачным, следует написать:

a = new Color (example);
t = new Object();
t = { ra:0, rb:200, ga:0, gb:0, ba:0, bb:0, aa:50, ab:0 }
a.setTransform(t);

Обратите внимание на свойство aa, равное 50. Именно оно задает 50-процентную прозрачность нашего мувика. Остальные значения здесь просто переписаны с полученных функцией getTransform.

Хотя для начала мы определили все свойства объекта t, впоследствии, если требуется изменить только одно какое-нибудь свойство, это можно сделать, не переопределяя остальные. Например, чтобы вернуть мувику непрозрачность, можно написать так:

t.aa = 100;
a.setTransform(t);

Как видите, для доступа к свойствам объекта t используется та же форма записи имя объекта и точка перед именем свойства.

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

i = new Color( example);
s = new Object();
q = 0; // переменная для значения прозрачности
s = {ra: '100', rb:'255', ga:'100', gb:'0', ba:'100', bb:'0', aa:'40', ab:'0'} //согласно документации, значения свойств должны быть строками
аа = -1; // переменная "направления"

Во втором кадре введем следующий код:

s.аа = string(q); // устанавливаем значение прозрачности
a.setTransform(s);
q += aa; // изменяем его на заданную величину
if (q < 0) аа = 1; // если значение вышло из заданного диапазона
if (q > 100) aa =- 1; // меняем направление изменения

И, наконец, в третьем кадре напишем просто

gotoAndPlay (2);

чтобы обеспечить циклическое исполнение кода во втором кадре.

Между прочим, в этом примере использован так называемый трехкадровый цикл - прием, очень часто применяющийся в программе Flash. К трехкадровым циклам мы еще вернемся в главе 6.

Работа с временем и датой
Теперь рассмотрим объект Date (Дата), предназначенный для работы с датами и временем. При создании объекта Date можно указать год, месяц, день месяца, часы, минуты, секунды и миллисекунды. Если же ничего этого не указывать, то если написать просто

а = new Date();

используются текущие системные дата и время.

Объект Date имеет множество свойств и методов, например, getDate для получения дня месяца, getDay для дня недели, getMonth для номера месяца и так далее. Они очень похожи на одноименные свойства одноименного объекта языка JavaScript. Однако есть и различия. Например, свойство getMilliseconds возвращает количество миллисекунд, прошедших с начала последней секунды, а не от некоторой общей точки отсчета.

Дополнительные математические операции
Объект Math предназначен для облегчения математических расчетов. Если бы этого объекта не было, то при необходимости вычисления значения, например, синуса, пришлось бы приложить немало усилии. Собственно говоря, так и было в предыдущей версии Flash. Теперь же для этого можно просто вызвать метод Math.sin и указать величину угла в радианах.

Объект Math содержит свойства со значениями наиболее важных математических констант (РI - число пи, Е - число е, SQRT2 - квадратный корень из 2, SQRT1_2 - квадратный корень из одной второй, LN10 - натуральный логарифм 10 и так далее). Методы объекта Math можно разделить на несколько групп.

  • округление (ceil, floor, round);
  • простые вычисления (abs, max, min);
  • сложные вычисления (pow, sqrt, exp, log)
  • тригонометрические вычисления (sin, cos, tan, asin, acos, atan, atan2);
  • случайные последовательности (random).
Полностью свойства и методы объекта Math перечислены в приложении.

Взаимодействие с устройствами ввода
Теперь рассмотрим объекты Mouse (Мышь) и Key (Клавиша). Они весьма просты. Объект Mouse предназначен для управления видимостью указателя мыши и имеет всего два метода. Если почему-либо требуется, чтобы стандартный указатель мыши не отображался в ролике (например, это может потребоваться для использования внутри ролика собственного, неповторимого указателя мыши), то достаточно написать:

Mouse.hide ();

Для "возвращения" стандартного указателя можно написать

Mouse.show();

Разумеется, нужно иметь в виду, что указатель мыши при использовании метода Mouse.hide невидим только при прохождении над окном ролика, а в других частях экрана он имеет обычной вид.

Объект Key предназначен контроля нажатий на клавиш. Он имеет четыре важных метода.

  • Метод getAscii возвращает код ASCII последней нажатой клавиши.
  • Метод getCode возвращает скан-код последней нажатой клавиши.
  • Метод isDown возвращает значение "истина" (true), если указанная клавиша нажата.
  • Метод isToggled возвращает значение "истина" (true), если режим NumLock или CapsLock активен.
Кроме того, у объекта Key есть большой набор свойств, которые позволяет не запоминать коды клавиш. Например, вместо кода клавиши ESC (27) можно указать просто Key.ESCAPE.

В качестве примера создадим ролик, который выводит на экран коды нажатых клавиш. Откроем новый ролик и создадим в его единственном кадре динамическое текстовое поле. Ассоциируем его с переменной qqq. Создадим пустой мувик и тоже разместим его в основном ролике. Откроем окно его сценария и напишем такой код:

onClipEvent (keyDown) {
_root.qqq = Key.get Code ();
}

Все! Теперь при нажатии любой клавиши переменной qqq присваивает и значение кода нажатой клавиши, а значит, оно же выводится в соответствующем текстовом поле.

Гибкая работа со строками
Несмотря на то что в языке ActionScript возможна работа со строковыми переменными, существует еще и специальный объект String (Строка), позволяющий работать со строками более гибко. Чтобы работать со строкой как с объектом, необходимо вначале создать ее оператором new.

а = new String ("Hello!");

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

Методы объекта String довольно разнообразны. Здесь есть возможность преобразовать символы строки в верхний или нижний регистр (toUpperCase и toLowerCase), определить позицию указанного символа, считая от начала или от конца строки (indexOf и lastlndexOf) и так далее. Список методов объекта String можно найти в приложении 2.

Управление звуковым сопровождением
Для управления звуком в языке ActionScript предусмотрен объект Sound (Звук). Чтобы применить этот объект, нужно сначала создать его с помощью оператора new.

а = new Sound ();

Здесь вместо а можно использовать любое имя новой переменной. Если при создании объекта Sound в скобках ничего не указано, то объект создается в основном ролике. Если необходимо создать объект Sound внутри экземпляра мувика, в скобках надо указать его имя, например, так:

а = new Sound (MyMovieClip);

После того как объект Sound создан, с помощью его методов можно управлять воспроизведением звука в основном ролике или внутри мувиков.

Метод stop останавливает воспроизведение звука. Например, чтобы нажатие на клавишу (к примеру, ESC) останавливало звучание, достаточно написать следующую строку

If (key.isDown(key.ESCAPE)) a.stop();

и обеспечить цикличность исполнения этого кода. Например, установите периодическое возвращение в кадр с этим кодом или поместите его в мувик внутрь оператора onClipEvent.

Правда, остановка воспроизведения вовсе не означает, что этот звук не может зазвучать вновь, если ролик перейдет на соответствующий кадр. Если надо вообще запретить воспроизведение, об этом следует позаботиться отдельно.

Метод start, наоборот, позволяет программно начать воспроизведение звука. Если ролик или мувик содержит несколько звуков, метод start запускает последний из них. Можно заставить звукозапись воспроизводиться не сначала, указав смещение в секундах. Кроме того, можно указать количество повторов звука. Например, если написать

a.start (2,6);

то звук начнентся не сначала, а с двухсекундной отметки, и повторится 6 раз.

С помощью метода setVolume можно программно изменять громкость звука. При этом значение 100 означает максимально возможную громкость (coбственно говоря, оригинальную громкость импортированного звука - если звук изначально тихий, то усилить его этим методом нельзя). Значение 0 означает минимальную громкость - звук фактически отсутствует. Например, строка

a.setVolume(50);

сделает звук вдвое тише, чем громкость оригинала.

С помощью метода setPan можно устанавливать пространственную позицию (выполнять панорамирование) звука. В этом случае значение -100 означает звук только в левом канале, а значение 100 - только в правом. Следующая строка установит звук по центру:

а.setPan(0);

Пример управления звуком
Давайте приведем небольшой пример. Пусть требуется создать ролик, который постоянно воспроизводит звук, а пользователь может с помощью клавиш ВЛЕВО и ВПРАВО перемещать его по стереопанораме.

Откроем новый ролик, импортируем в него звук, который хорошо зацикливается (главное условие этого - одинаковый уровень сигнала в начале и в конце, что обеспечивает гладкую стыковку). Перетащим его из библиотеки в рабочую область. Передвинем звук во второй кадр, оставив первый пустым. На вспомогательной панели Sound (Звук) выберем в раскрывающемв списке Sync (Синхронизация) пункт Start (Новый запуск). Это необходимо, чтобы звук не накладывался сам на себя.

Создадим новый слой для сценария. В первом кадре создадим объект Sound и зададим начальное значение переменной i, управляющей перемещением звука по стереопанораме:

a = new Sound ();
i = 0;

Перейдем во второй кадр. В нем мы методом key.isDown проверим, не нажата ли одна из интересующих нас клавиш. Если это так, мы, соответственно увеличим или уменьшим значение переменной i, а затем переместим звук по стереопанораме на новое место методом setPan. Если ни одна из интересующих клавиш не нажата, значение переменной i не изменится и, соответственно, метод setPan сработает "вхолостую" - звук останется "на прежнем месте".

Правда, неплохо бы еще и ограничить диапазон значений переменной i. Поэтому к проверке на нажатие клавиши мы добавим еще проверку на достижение минимального и максимального значения переменной i. Ведь если значение i уже достигло 100, дальше увеличивать его нет смысла, а если оно достигло -100, то нет смысла его уменьшать.

Вот какой код получится во втором кадре:

If ((key.isDown(key.RIGHT))&&(i < 100)) i += 5;
if ((key.isDown(key.LEFT))&&(i > -100)) i -= 5;
a.setPan (i);

Здесь мы увеличиваем и уменьшаем значение переменной i сразу на 5, чтобы перемещение звука было достаточно ощутимым. Вместо 5 можно установить любую подходящую величину.

И, наконец, в третьем кадре напишем единственную строку

gotoAndPlay (2);

чтобы обеспечить циклическое повторение кода второго кадра.

Ролик готов. Просмотрите (или, вернее будет сказать, прослушайте) его. При управлении с клавиатуры звук перемещается по стереопанораме вправо и влево.

Управление стереосигналом
Кроме вышеперечисленных методов, объект Sound содержит еще и метод setTransform. Этот метод позволяет "перепанорамировать" стереозвуки, по-новому выставив баланс между левым и правым каналом, а также свободно микшируя каналы.

Грубо говоря, любой стереозвук поступает на вход программы Flash в виде двух сигналов, идущих по левому и правому каналам. Будем называть их сходными каналами.

На выходе у программы Flash также имеются левый и правый каналы (назовем их выходными). Если звук не трансформировать, то сигнал с левого входного канала направляется на левый выходной, а сигнал с правого входного - на правый выходной канал.

Однако, включив звуковую трансформацию, можно произвольно направлять звук на выходные каналы. Например, можно сделать так. Звук с левого входного канала с 80-процентной громкостью направляется на левый выходной канал и с 20-процентной громкостью - на правый. Звук с правого входного канала, соответственно, с 80-процентной громкостью направляется на правый выходной канал и с 20-процентной громкостью - на левый. Этот процесс иногда называют стереосглаживанием.

Возможны и более простые случаи. Например, направив звук с каждого из входных каналов с 50-процентной громкостью на оба выходных канала можно превратить стерео в моно. Если же полностью перенаправить звук левого входного канала на правый выходной, а с правого входного - на левый выходной, это как бы поменяет каналы местами.

Если на входе программы Flash оказывается монофонический звук, то сигнал считается поступающим на левый входной канал. По умолчанию такой сигнал направляется с полной громкостью на оба выходных канала.

Метод setTransform позволяет применить звуковую трансформацию, подобную описанной. Применяя этот метод, следует в качестве аргумента указать имя объекта, имеющего свойства ll, lr, rl, rr. Эти свойства означают:

  • ll - громкость сигнала, направляемого с левого входного на левый выходной канал;
  • lr - громкость сигнала, направляемого с левого входного на правый выходной канал;
  • rl - громкость сигнала, направляемого с правого входного на левый выходной канал;
  • rr - громкость сигнала, направляемого с правого входного на правый выходной канал.
Для создания объекта, имеющего вышеописанные свойства, следует использовать объект "общего назначения" Object. Например, чтобы совершить первую из описанных звуковых трансформаций (стереосглаживание), следует написать такой код:

а = new Sound ();
b = new Object ();
b = { ll : 80, lr : 20, rl : 20, rr :80 }
a.setTransform (b);

Кроме того, можно всегда получить текущие значения громкости, расположения по стереопанораме и трансформации звука, используя методы getVolume, getPan и getTransform. В дополнительных параметрах эти методы не нуждаются.

Работа с полями ввода
При работе с полями ввода можно программно взаимодействовать с пользователем, пользуясь объектом Selection (Выбор). Делается это следующим образом.

С помощью метода getFocus можно получить имя переменной, соответствующей активному полю ввода (то есть тому, которое имеет в данный момент фокус ввода), например:

a = Selection.getFocus();

Соответственно, таким же образом с помощью метода setFocus можно установить фокус ввода на любое поле ввода. Например, если нужно перевести фокус ввода на поле, которому соответствует переменная myfield, достаточно написать:

Selection. setFocus (myfield);

С помощью методов getBeginlndex, getEndlndex и getCaretlndex можно получить значения позиций начала выделения, конца выделения, а также текущей позиции курсора в активном поле ввода. Например, если в поле ввода находится текст "Здравствуйте, я ваша тетя!" и пользователь выделили слово "ваша", то метод getBeginlndex вернет значение 16 (нумерация символов начинается с 0), а метод getEndlndex - значение 20 (номер первого невыделенного символа после выделения).

Можно также программно выделить фрагмент текста в поле пользовательского ввода. Для этого следует использовать метод setSelection, которому следует указать номера символов начала и конца выделения. Например, для того, чтобы выделить в поле с надписью "Здравствуйте, я ваша тетя!" слово "Здравствуйте", следует написать:

Selection.setSelection (0,12);

Если применить методы getBeginlndex, getEndlndex и getCaretlndex при отсутствии фокуса ввода в каком-либо поле ввода, они вернут значение -1. Метод getFocus при этом вернет значение null.

Дополнительные объекты ActionScript
В некоторых случаях вместо числовой переменной может потребоваться использование специального объекта Number (Число). Используя его свойства, можно получить минимально и максимально возможные значения, а также значения плюс и минус бесконечность и специальное значение NaN (не число). Свойства объекта Number приведены в приложении 2.

В языке ActionScript существует также объект Boolean (Логическое значение), принимающий логические значения "истина" (true) или "ложь" (false). В некоторых случаях для логической ясности может потребоваться применение этого объекта.

Кроме того, существует еще один тип объекта - MovieClip (Мувик). Объекты этого типа не нуждаются в создании с помощью оператора new. Они ассоциированы с мувиками, хранящимися в библиотеке ролика. Поэтому методы этого объекта можно использовать, просто обращаясь к объекту по имени.

Например, если существует мувик по имени abc, можно написать что-нибудь вроде

abc.gotoAndPlay(10);

Эта запись аналогична традиционной

tellTarget ("abc") {
gotoAndPlay (10);
}

В приложении 2 можно найти полный список методов объекта MovieClip. Если внимательно посмотреть на этот список, можно заметить, что многие методы этого объекта совпадают по имени и назначению с операторами, относящимися к основному ролику и мувикам. Поэтому здесь мы не станем подробно останавливаться на применении этих методов, однако в следующих главах будем время от времени их использовать.

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

Назад
Компьютерная графика © 2014 ОСУ ИК Вход