Иллюстрированный самоучитель по Flash-games


Урок 21. Пересечение объектов.


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

onClipEvent (enterFrame) {

if (this.hitTest(_root._xmouse,_root._ymouse,true)) {

this._x = int(Math.random()*550);

this._y = int(Math.random()*400);

}

}

Строка this.hitTest () обозначает, что функция hitTest применяется к текущему клипу. Она включает три параметра: горизонтальное и вертикальное положение мыши, а также булевый параметр (значения true/false). Последний параметр определяет, использует ли Flash для контроля пересечения прямоугольную область, в которой содержится данный клип, или точную форму изображения в клипе. Во втором случае параметр должен быть равен true.

Исходный файл: Runaway.fla

Вышеописанный код рассматривается в примере Runaway.fla. Если установить курсор над клипом, он переместится в случайную точку экрана.

Исходный файл: Collision.fla

Для того чтобы определить, пересекаются ли два клипа, вы можете использовать один параметр - указатель на второй клип. В ролике Collision.fla на рабочем поле находятся два клипа. Клип большего размера называется "target", меньшего - "bullet". За пределами рабочего поля расположен клип "actions" со следующим кодом:

onClipEvent (enterFrame) {

// Выясняем, попала ли пуля в мишень.

if (_root["target"].hitTest(_root["bullet"])) {

// Попадание, увеличиваем цель.

_root["target"]._xscale += 5;

_root["target"]._yscale += 5;

// Убираем пулю.

_root["bullet"]._x = 350;

} else {

// Нет попадания, пуля летит дальше.

_root [ "bullet" ] ._х -= 5;

}

}

Код задает перемещение снаряда на 5 пикселов. Если сталкиваются два клипа, мишень немного увеличивается за счет увеличения масштаба на 5%. Горизонтальная координата снаряда принимает первоначальное значение, и он может опять начинать свое перемещение. Вы научились изменять масштаб клипа и его положение. Далее вы узнаете другие способы, с помошью которых можно изменить внешний вид клипа.




- Начало -  - Назад -  - Вперед -