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

Загрузка символа из библиотеки

Теперь можно перетащить на сцену клип-прямоугольник и перемещать его вслед за машиной. Но мы применим другой прием — «вытащим» клип из библиотеки во время работы ролика, используя код на ActionScript.

Сначала надо подготовить клип — дать ему имя.

  1. Дайте символу Прямоугольник из библиотеки кодовое имя rectangle для использования в программе (команда Linkage в контекстном меню). Добавьте в обработчик события load для машины строчку

_root.attachMovie("rectangle", "rect", _root.getNextHighestDepth() );

Здесь мы вызвали метод attachMovie (присоединить клип) для главного монтажного стола _root. У этого метода три параметра:

  • кодовое имя символа, в данном случае — rectangle;

  • имя экземпляра, к новому клипу можно будет обращаться как _root.rect;

  • глубина клипа на монтажном столе (от -16384 до 1048575).

Для того, чтобы расположить клип поверх всех существующих (на этом монтажном столе), мы использовали метод getNextHighestDepth («получить следующую самую высокую глубину»). Она вернет номер первого свободного уровня.

Определение границ клипа

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

Границы прямоугольника для любого клипа можно определить с помощью метода getBounds. Например, границы клипа qq на главном монтажном столе определяются так:

bounds = qq.getBounds(_root);

В переменную bounds будет помещен объект, у которого есть 4 свойства: xMin, xMax, yMin и yMax, определяющие предельные значения области по осям X и Y. Разница xMax-xMin дает ширину прямоугольника, а yMax-yMin — его высоту.

  1. Добавьте этот код в конец обработчика события enterFrame для машины:

bounds = this.getBounds(_root);

with (_root.rect) {

_x = bounds.xMin;

_y = bounds.yMin;

_width = bounds.xMax - bounds.xMin;

_height = bounds.yMax - bounds.yMin;

}

  1. Сохраните фильм и проверьте его работу

Запись with(_root.rect){...} говорит о том, что все команды внутри фигурных скобок относятся к свойствам объекта _root.rect. Вместо этого можно было записать:

_root.rect._x = bounds.xMin;

_root.rect._y = bounds.yMin;

_root.rect._width = bounds.xMax - bounds.xMin;

_root.rect._height = bounds.yMax - bounds.yMin;

Использование with(...) сокращает запись, но может усложнить понимание кода.

Точка и клип Вторая форма hitTest

В этом примере красная точка (изображающая судно или яхту) при нажатии клавиш-стрелок может перемещаться по карте. Однако точка не может зайти на сушу.

Здесь используется еще один вариант вызова стандартной функции hitTest:

qq.hitTest ( x, y, true )

Эта функция определяет, попадает ли точка с координатами x и y (это глобальные координаты, для главного монтажного стола) в область клипа с именем qq. Третий параметр, равный true, означает, что надо учитывать форму фигуры внутри клипа, то есть попадание точки в пустые области «не считается».

Если третий параметр будет равен false, функция определяет, попала ли точка в прямоугольник, ограничивающий клип

  1. Скопируйте файл map.fla. Преобразуйте карту в клип Карта (клавиша F8, тип Movie Clip). Дайте экземпляру клипа имя map.

  2. Создайте новый слой Точка и перетащите на него клип Точка из библиотеки. С помощью панели Properties установите высоту и ширину объекта 10 пикселей. Добавьте к клипу код, позволяющий двигать точку по экрану клавишами-стрелками

onClipEvent (load) {

v = 2;

function move ( d ) {

r = _rotation * Math.PI / 180;

_x += d * Math.sin(r);

_y -= d * Math.cos(r);

}

}

onClipEvent (enterFrame) {

if (Key.isDown(Key.UP)) _y -= v;

else

if (Key.isDown(Key.DOWN)) _y += v;

if (Key.isDown(Key.LEFT)) _x -= v;

else

if (Key.isDown(Key.RIGHT)) _x += v;

}

  1. Проверьте ролик.

В простейшем случае, когда объект достаточно мал, можно проверить только попадание его центра в активную зону клипа.

  1. Добавьте в обработчик события load строчки

_xOld = _x;

_yOld = _y;

  1. и функцию для проверки столкновения с картой:

function check() {

if ( _root.map.hitTest(this._x, this._y, true) ) {

_x = _xOld;

_y = _yOld;

}

}

  1. В самое начало обработчика enterFrame вставьте вызов функции

check();

  1. Посмотрите, как двигается точка и сохраните фильм с именем ЛР6_2.fla

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