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

Цикл по всем дочерних объектов

Для перебора всех «детей» используется специальный вид цикла:

for ( x in объект ) { ... }

Здесь вместо слова объект нужно указать абсолютный или относительный адрес объекта. Например, код

for ( x in _root )

trace( _root[x]._name );

выводит в окно Output имена всех объектов главного монтажного стола (они определяются на панели Properties). Вместо x можно использовать любое другое имя переменной.

Кроме клипов, к объекту могут присоединяться и другие элементы (например, функции). Определить класс объекта можно с помощью оператора typeof.

  1. Создайте новый слой Программа и добавьте в первый ключевой кадр код

for ( x in _root )

trace( "Объект " + _root[x] +

", класс: " + typeof _root[x] +

", имя: " + _root[x]._name );

  1. Запустите фильм.

Скорее всего, вы увидите на экране что-то такое:

Объект WIN 9,0,45,0, класс: string, имя: undefined

Объект _level0.finish, класс: movieclip, имя: finish

Объект _level0.car, класс: movieclip, имя: car

Объект _level0.stone4, класс: movieclip, имя: stone4

Объект _level0.stone3, класс: movieclip, имя: stone3

Объект _level0.stone2, класс: movieclip, имя: stone2

Объект _level0.stone1, класс: movieclip, имя: stone1

Первая строчка определяет версию Flash-проигрывателя (в виде символьной строки, string). В данном случае используется версия 9.0.45.0 для Windows. Остальные строчки описывают клипы, находящиеся на главном монтажном столе (на уровне 0, отсюда _level0 — здесь это то же самое, что и _root).

  1. Выведите в окно Output информацию о внутренних объектах для камня _root.stone1.

Так как мы не давали имена клипам-точкам, программа сделала это самостоятельно, они называются instance1, instance2 и т.д. Теперь можно написать код, с помощью которого строится массив объектов-точек для каждого камня.

  1. Выделите камень в левом нижнем углу (его имя — stone4) и добавьте к нему код обработчика события load:

onClipEvent (load) {

points = new Array();

for (x in this)

if ( typeof this[x] == "movieclip" &&

this[x]._name.indexOf('instance') >= 0 )

points.push(this[x]);

}

При загрузке клипа создается новый внутренний массив points, в который записываются адреса всех клипов-точек — объектов типа movieclip, в именах которых есть слово instance. Метод push означает «добавить новый элемент в конец массива».

Теперь нужно написать функцию проверки столкновения: она будет возвращать true при столкновении (если хотя бы одна из точек попадает в область клипа car) и false, если столкновения нет. Для этого используется «точечная» форма метода hitTest, как и в предыдущем разделе.

  1. Добавьте к обработчику load для клипа-камня код функции hits:

function hits ( obj ) {

var p = new Object();

for ( i=0; i<points.length; i++) {

p.x = points[i]._x;

p.y = points[i]._y;

this. localToGlobal ( p );

if ( obj.hitTest(p.x, p.y, true) ) {

this.points[i].play();

return true;

}

}

return false;

}

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