Цитата:
Сообщение от 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;
}