Обнаружение столкновения "окружность - окружность". На данном уроке вы научитесь находить в какой точке произошло столкновение(касание, называйте как хотите). Данный способ можно использовать в играх типа "тетрис, бильярд, хоккей", вообщем это уже решать вам.
Приступим.
Для начала надо усвоить одно простое правило:
Сталкновение произошло если рассояние между двумя окружностями меньше суммы или равно сумме их радиусов.
Данное правило легко учится если посматреть на рисунок ниже. Ничего сложного нету это простая логика.
Ну а теперь к самому интересному!
Для начала из вышеописанного правила надо выделить и разобрать РАССТОЯНИЕ.
Code
xD=circle1._x-circle2._x
yD=circle1._y-circle2._y
Code
distance=Math.sqrt(xD*xD+yD*yD)
Теперь когда мы нашли расстояние(дистанцию) между двумя точками(центры окружностей), надо проверить меньше ли она сумме радиусов окружностей:
Code
if(distance <= circle1_radius + circle2_radius)
{
//произошло столкновение
}
Ниже приведен полный код урока:
Code
function circle_circle_detection()
{
// находим катеты
xD = circle1._x - circle2._x;
yD = circle1._y - circle2._y;
// находим радиус(половина окружности)
circle1_radius = circle1._width / 2;
circle2_radius = circle2._width / 2;
// находим дистанцию(расстояние)
distance = Math.sqrt(xD * xD + yD * yD);
// проверяем пересечение
if (distance <= circle1_radius + circle2_radius)
{
trace("пересекаются");
}
else
{
trace("--------------");
}
}
//вызываем в каждом кадре проверку
onEnterFrame = function ()
{
circle1._x++;
circle1._y++;
circle2._x--;
circle2._y--;
circle_circle_detection();
};
// вот и весь урок. :)
Я думаю это довольно просто. Но если чтото непонятно то лучше прочитать еще раз.