Привет. Пытаюсь понять, как реализовать реакцию на столкновение квадратов (отскок).
Прошу вашей консультации т.к. не всё проходит гладко.
Что необходимо сделать, чтобы просчитать траекторию отскока:
1. Определить по какой оси делать отскок (x или y).
Нахожу расстояние между 2-мя квадратами по x и по y. Если расстояние по x больше чем по y, значит столкновение по оси x и отскок будет по этой оси. Аналогично с y.
Код:

Код AS3:
var dx:Number = Math.abs(rect1.x - rect2.x);
var dy:Number = Math.abs(rect1.y - rect2 .y);
2. Необходимо определить, в какую сторону делать отскок. Если квадраты летят друг другу в лоб - отскок делаем в разные стороны.
Если rect1 догоняет rect2 (скорость rect1 > скорости rect2) - отскок осуществляет только rect1 в противоположную сторону, а rect2 как летел так и летит.
Код:

Код AS3:
// если направление квадратов одинаковое
if(rect1.directionX == rect2.directionX)
{
// Скорость квадрата, который доганяет - больше,
// значит отскакивать будет он
if(rect1.vx > rect2.vx )
{
rect1.vx *= -1;
}
else
{
rect1.vy *= -1;
}
}
// если направление квадратов разное (летят в лоб друг другу)
// отскок в разные стороны
else if(rect1.directionX != rect2.directionX)
{
rect1.vx *= -1;
rect1.vy *= -1;
}
В результат получилось вот
это Мы видим, что иногда квадраты прилипают друг другу.
Ощущение кривизны кода портит настроение. Подскажите, пожалуйста, где я не прав и как это исправить?
Хочется понять принцип.
За ранее спасибо.