Показать сообщение отдельно
Старый 31.05.2013, 11:04
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Мне кажется, ошибка кроется здесь. Опишите подробнее, как у Вас танки договариваются о разьезде.
Если смотреть исходник, то за этот алгоритм отвечает функция
Код AS1/AS2:
processCrash()
Кратко суть такова: считаем разницу векторов движения мелкого и большого танков; если она по абсолютному значению в пределах 15-90 градусов, то просто присваиваем вектор мелкого танка большому и наоборот; в противном случае смотрим знак разницы векторов и в зависимости от него даем чуть меньше 90 градусов разворота каждому танку с разными знаками.
Вот кусочек кода, который за это отвечает:
Код AS1/AS2:
// угол поворота
var angRotLT:Number;
var angRotHT:Number;
//
var diffAng:Number = dAngle(tankL._rotation) - dAngle(tankH._rotation);
//
if (Math.abs(diffAng) <= 90 && Math.abs(diffAng) >= 15)
{
	angRotLT = dAngle(tankH._rotation);
	angRotHT = dAngle(tankL._rotation);
}
else
{
	if (diffAng < 0)
	{
		angRotLT = dAngle(tankL._rotation + 80);
		angRotHT = dAngle(tankH._rotation - 70);
	}
	else if (diffAng > 0)
	{
		angRotLT = dAngle(tankL._rotation - 80);
		angRotHT = dAngle(tankH._rotation + 70);
	}
	else if (diffAng == 0)
	{
		if (randNum(2) == 2)
		{
			angRotLT = dAngle(tankL._rotation - 45);
		}
		else
		{
			angRotLT = dAngle(tankL._rotation + 45);
		}
	}
}
// избавляемся от отрицательных углов и углов >360 градусов
function dAngle(da:Number):Number
{
	while (da < 0)
	{
		da = 360 + da;
	}
	while (da > 360)
	{
		da = da - 360;
	}
	// 
	return da;
}