Flash Game Book (8 урок)
Обнаружение столкновений с применением математики
Используя математику, мы можем создать код обнаружения для нескольких фигур.
С помощью hitTest() обнаружение столкновений для этих ситуаций не могло бы быть точным,
потому-что эта функция не обрабатывает столкновение между фигурами внутри двух клипов.
Обнаружение столкновения точки с окружностью
Если расстояние между точкой и центром окружности меньше,
чем радиус окружности, то точка попала в окружность.
Обратите внимание, что радиус окружности составляет половину ее ширины.
Рассмотрим на примере.
На нашем первом слое нарисуем круг.
Преобразуем объект в клип (F8) с именем круг_клип1.
Создадим пару точек.
Преобразуем точки в клипы с именами точка_клип1 и точка_клип2.
Выберем наш слой.
И впишем в него код (Actions-Frame):
точка1 = {};
точка1.x = точка_клип1._x;
точка1.y = точка_клип1._y;
точка2 = {};
точка2.x = точка_клип2._x;
точка2.y = точка_клип2._y;
круг1 = {};
круг1.x = круг_клип1._x;
круг1.y = круг_клип1._y;
круг1.radius = круг_клип1._width/2;
function обнаружениеТочкиВОбъекте(точка, круг) {
var xDiff = круг.x-точка.x;
var yDiff = круг.y-точка.y;
var distance = Math.sqrt(xDiff*xDiff+yDiff*yDiff);
if (distance<=круг.radius) {
trace("Точка в объекте!");
} else {
trace("Точка не в объекта!");
}
}
обнаружениеТочкиВОбъекте(точка1, круг1);
обнаружениеТочкиВОбъекте(точка2, круг1);
Строка 1 создает новый объект с именем точка1,
который мы будем использовать как контейнер для хранения информации о клипе точка_клип1.
Строка 2 и 3 создают переменные для объекта, для представления позиции клипа.
Далее таким же методом создаются объекты для остальных клипов.
Строка 11 определяет функцию для обнаружения столкновения и применяет ее для проверки на столкновение.
Функция принимает два параметра: точка и круг.
Точка и круг являются объектами, действующими лишь при выполнении функции.
Для обнаружения столкновения, мы сравниваем расстояние между точкой и окружностью с радиусом окружности.
Для этого, мы определяем расстояние используя теорему Пифагора.
Последние две строки вызывают функцию, с передачей ей объектов, для которых мы хотим проверить столкновение.
... следующим будет обнаружение столкновения окружности с окружностью ...