Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ActionScript 2.0 ЛР.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.88 Mб
Скачать

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

Элементом массива может быт другой массив:

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:

  • объединение массивов, в результате строится новый массив:

C = A.concat ( B, 12 );

в массиве C записаны все элементы массива A, затем все элементы массива B, а затем — число 12;

  • добавление элементов в начало массива

A.unshift ( 3, 4, "qq" );

и в конец массива

A.push ( 3, 4, "qq" );

  • удаление элемента с начала массива

x = A.shift();

и с конца массива

x = A.pop();

удаленный элемент записывается в переменную x;

  • перестановка элементов массива в обратном порядке:

A.reverse();

  • извлечение части массива в новый массив:

B = A.slice ( n1, n2 );

здесь в массив B копируются все элементы массива A с номерами от n1 до n2 включительно;

  • сортировка массива

A.sort();

По умолчанию элементы массива сортируются по возрастанию в алфавитном порядке; если надо сортировать числа, используется форма

A.sort ( Array.NUMERIC );

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

A.sort ( Array.NUMERIC + Array.DESCENDING );

Если нужна нестандартная сортировка, в качестве параметра указывается ссылка на функцию, которая принимает два параметра (элемента массива) и возвращает

    • отрицательное число, если первый «меньше» второго;

    • 0, если элементы равны;

    • положительное число, если первый «больше» второго.

Например:

A = [12, 328, 731];

A.sort(cmpFun);

function cmpFun(a, b) {

return (a%10)-(b%10);

}

trace(A);

Массив будет отсортирован по возрастанию последней цифры:

731,12,328

потому что a%10 — это остаток от деления числа a на 10 или его последняя цифра.

Работа с массивами

В нашем примере мы создадим массив, в котором будут храниться коды цветов всех кнопок.

  1. Удалите ранее созданные обработчики. Создайте новый слой Программа и в первый кадр введите код, заполняющий массив кодами цветов:

colors = [0x000033, 0x000066, 0x000099,

0x003300, 0x006600, 0x009900,

0x330000, 0x660000, 0x990000];

Обратим внимание, что обработчики события release для всех кнопок почти одинаковые и отличаются только кодом цвета. Поэтому можно создать для них одну единственную функцию, которую будут вызывать все кнопки.

Слой Программа можно сразу же заблокировать, щелкнув по значку в столбце . Это позволит добавлять код ActionScript, но не даст случайно добавить что-то еще.

  1. Добавьте функцию, которая изменяет цвет логотипа в соответствии с цветом кнопки, на которой щелкнули мышкой:

function changeColor() {

c = new Color(this);

col = c.getRGB();

cLogo = new Color(_root.logo);

cLogo.setRGB(col);

}

В этой функции мы сначала определяем цвет кнопки, получив доступ к нему через переменную с и используя метод getRGB. Затем этот цвет переносится на логотип.

Созданная функция пока не работает, поскольку мы не определили, в каких случаях она вызывается. Для того, чтобы она стала обработчиком события release некоторой кнопки, достаточно написать

Кнопка.onRelease = changeColor;

Далее мы с помощью цикла, в котором переменная i (номер кнопки) меняется от 0 до 8, настроим все кнопки сразу: перекрасим их в нужный цвет и добавим обработчик события.

Чтобы в цикле обращаться к кнопке по ее номеру, можно использовать специальную форму _root[имя]. Таким образом, _root["color0"] это то же самое, что и _root.color0, но преимущество первого метода в том, что имя кнопки можно построить динамически, во время выполнения, например, так:

_root["color"+chr(48+i)]

Функция chr преобразует код символа в символ. Учитывая, что цифры 0-9 имеют коды 48-57, при i=2 получаем _root["color2"].

Чтобы эта идея сработала, кнопкам нужно дать соответствующие имена color0, color1 и т.д., что уже было сделано заранее (проверьте это на панели Properties, выделив какую-нибудь кнопку).

  1. Добавьте к коду кадра 1 цикл:

for (i=0; i<9; i++){

obj = _root["color"+chr(48+i)];

c = new Color(obj);

c.setRGB(colors[i]);

obj.onRelease = changeColor;

}

Здесь переменная obj — это адрес кнопки с номером i.

  1. Проверьте работу фильма и сохраните его c именем ЛР3_3.fla

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]