Урок 21. Пересечение объектов
Урок 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) {
// Auyniyai, iiiaea ee ioey a ieoaiu.
if (_root["target"].hitTest(_root["bullet"])) {
// Iiiaaaiea, oaaee.eaaai oaeu.
_root["target"]._xscale += 5;
_root["target"]._yscale += 5;
// Oae.aai ioe..
_root["bullet"]._x = 350;
} else {
// Iao iiiaaaiey, ioey eaoeo aaeuoa.
_root["bullet"]._x -= 5;
}
}Код задает перемещение снаряда на 5 пикселов. Если сталкиваются два клипа, мишень немного увеличивается за счет увеличения масштаба на 5 %. Горизонтальная координата снаряда принимает первоначальное значение, и он может опять начинать свое перемещение. Вы научились изменять масштаб клипа и его положение. Далее вы узнаете другие способы, с помощью которых можно изменить внешний вид клипа.
Данный текст является ознакомительным фрагментом.