[ предыдущая страница ] [ следующая страница ] [ содержание ]

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

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

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

5.6.1. Массивы

Начнем с объекта 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, а для превращения массива в строку - метод 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. Этот метод "вырезает" фрагмент массива (для него необходимо указать индексы первого и последнего элементов вырезаемого фрагмента) и создает новый массив. При этом старый массив остается нетронутым. Например, если написать

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

произойдет следующее. Сначала создается массив arr, затем он заполняется 40 элементами, имеющими индексы от 0 до 39 и значения от 0 до 390. Затем создается новый массив с именем a, в который записываются значения элементов, имеющих в массиве 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 и перейти к другим объектам.

5.6.2. Управление цветом

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

а = new Color(example);

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

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

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

col = a.getRGB();

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

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

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

a.setRGB (0xFF0000);

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

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

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

gotoAndPlay (1);

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

Программная настройка свойств

Управление объектом 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 возвращает не обычное числовое или строковое значение, а объект. У этого объекта есть такие свойства, как ra, rb, да и так далее. Их значения, кстати, в точности соответствуют значению полей вспомогательной панели Effects (Эффекты) при выбранном эффекте Advanced (Расширенный).

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

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

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

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

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

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

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

Пример управления цветом

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

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

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

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

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

gotoAndPlay (2);

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

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

5.6.3. Работа с временем и датой

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

а = new Date();

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

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

5.6.4. Дополнительные математические операции

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

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

Полностью свойства и методы объекта Math перечислены в приложении 2.

5.6.5. Взаимодействие с устройствами ввода

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

Mouse.hide ();

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

Mouse.show ();

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

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

Кроме того, у объекта Key есть большой набор свойств, которые позволяют не запоминать коды клавиш. Например, вместо кода клавиши ESC (27) можно указать просто Key.ESCAPE.

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

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

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

Поскольку переменная qqq (как и соответствующее динамическое текстовое поле) определена в основном ролике, а код мы пишем внутри экземпляра мувика, нам потребовалось указать, что мы обращаемся к переменной из основного ролика. Для этого был использован префикс _root. К этому вопросу мы еще вернемся в главе 6.

5.6.6. Гибкая работа со строками

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

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

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

[ предыдущая страница ] [ следующая страница ] [ содержание ]
Hosted by uCoz