Показать сообщение отдельно
Старый 15.12.2011, 13:52
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 1  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
По умолчанию Реакция на столкновение квадратов. Помогите доработать код.

Привет. Пытаюсь понять, как реализовать реакцию на столкновение квадратов (отскок).
Прошу вашей консультации т.к. не всё проходит гладко.
Что необходимо сделать, чтобы просчитать траекторию отскока:
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;		
}
В результат получилось вот это Мы видим, что иногда квадраты прилипают друг другу.
Ощущение кривизны кода портит настроение. Подскажите, пожалуйста, где я не прав и как это исправить?
Хочется понять принцип.
За ранее спасибо.


Последний раз редактировалось Art_133; 15.12.2011 в 15:22.