Урок 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%.
Горизонтальная координата снаряда принимает
первоначальное значение, и он может опять начинать свое
перемещение. Вы научились изменять масштаб клипа и его
положение. Далее вы узнаете другие способы, с помошью
которых можно изменить внешний вид клипа.
|