![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Приветствую, Коллеги.
Сегодня созрел для очередного к вам вопроса. Есть некая игровая механика (исходник прикреплен). Далее я немного поясню ее: 1. Два обьекта (в моем случае это танки) двигаются непрерывно в замкнутом пространстве 2. Со случайным интервалом времени каждый обьект может поменять вектор своего движения на некий случайный угол 3. Если обьекты подходят друг к другу достаточно близко - они начинают менять вектора движения так, чтобы разьехаться 4. При выходе за границу обьекты перемещаются на противоположную сторону зоны, в которую помещены Такой вот несложный ИИ. Но в процессе работы над ним столкнулся со следующими проблемами: 1. Мой обработчик столкновений недостаточно хорош и обьеты при странных обстоятельствах все же умудряются наезжать друг на друга 2. Обработка столкновений обьектов за границей зоны, которой они ограничены слегка примитивна, но до другой я не додумался Собственно, к сообществу у меня будет вопрос: если у вас есть соображения, где именно закралась ошибка по п. 1 и какой лучше применить алгоритм для п. 2 - буду рад каждой идее. Заранее всем спасибо. Последний раз редактировалось Zebestov; 30.05.2013 в 23:49. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Спасибо за наводку, попробую найти эту книгу.
|
|
|||||
|
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
Вот кусочек кода, который за это отвечает: // угол поворота 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; } |
|
|||||
function dAngle(da:Number):Number { while (da < 0) { da = 360 + da; } while (da > 360) { da = da - 360; } // return da; }
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|