Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Стрельба с упреждением


CHiF ©   (2003-03-21 12:48:00) 

Помогите ктонибудь реализовать.
Пишу 2дшутер вид сверху, и мне надо чтобы боты стреляли не туда где сейчас враг, а туда где он будет. Т.е. вобщем то получаетца геометрическая задача, токо вот у меня ничо невышло, вся надежда на вас, мастера.


neuro   (2003-03-23 20:21:00) [1]

2Juster~: видимо Nuke нужно было узнать все с поправкой на угол падения..


Juster~   (2003-03-23 20:17:00) [2]

-> Nuke: Ты же у нас опытный товарищ, крупные проекты затеваешь... а элементаго не знаешь...


CHiF   (2003-03-23 18:43:00) [3]

спасиба всем, ща проверим =)


neuro   (2003-03-23 04:21:00) [4]

2Nuke:

Что значит формулу свободного падения?!

Берем значит высоту равной H.По закону сохранения полной энергии: mv^2
---- = mgh -- отсюда можно v найти...
2

Тебе оно надо было и в координатное выражение?

2Rampelstinskin: физику с 7-го класса начинают изучать =)


Rampelstinskin   (2003-03-22 23:00:00) [5]

2Nuke
Учебник физики за 5ый класс если не ошибаюсь.


Nuke   (2003-03-22 22:51:00) [6]

А формулу свободного подения кто мне скажет !

А то мне надо сделать а ебаться расчитывая угол падения ! мне в падлу !


Rampelstinskin   (2003-03-22 22:45:00) [7]

В векторной форме
U - Координаты юнита
V - Скорость юнита
E - Координаты врага
D - Растояние до врага
v - Скорость снаряда
t - Время
Закон изменения растояния до врага по времени
D=E+V*t-U
Со скоростью снаряда связавыем так
|D|=v*t
PS для 2d |D|=sqrt(x*x+y*y)


Nuke   (2003-03-22 21:52:00) [8]

Гыыыы короче так ! делаеш своему снаряду команду !

Пуля.PoitTo( Гад);


Alek Aaz   (2003-03-22 17:31:00) [9]

2CHiF ©
Ну ты даешь пацан! Делается приблизительно так:
1. Вычисляешь время подлета снаряда в текущею позицию гада
Т = R (расстояние до гада)/V(скорость твоего супер-снаряда)
2. Вычисляешь где энто гадокажется в этот момент времени. Учитывая его текущюю скорост и направление.
3. Вычисляешь время подлета снаряда в гипотетическую позицию гада
Т1 = R1 (расстояние до предпологаемого положения гада)/V(скорость твоего супер-снаряда)
Если время подлета снаряда где-то равно гипотетическому то твой бот лепит в гипотетическую точку, где должен оказаться гад

Ежеле гаду хватит "ума" не переть в точку куда летит супер-снаряд то большой плюс твоему AI :)


Snap   (2003-03-22 10:20:00) [10]

Имхо надо в цикле несколько раз проделать описанную процедуру, но тока в каждой итерации менять временные координаты юнита, и так пока точность не превысит какого то определённого значения. (к примеру 1 пиксель)


CHiF   (2003-03-22 10:07:00) [11]

A_n_t: нееет, не так, если делать так, то рассчитываеца время
Time движения снаряда от юнита до ТЕКУЩЕГО положения врага, может с такой формулой и будут юниты попадать, иногда, но мне бы чегонибудь поточнее, математического такого. Может знает кто-нибудь? помогите плииз!!


Mihey   (2003-03-21 22:05:00) [12]

Сделать ракеты-стингеры. :)


A_n_t   (2003-03-21 16:54:00) [13]

X_Uint, Y_Uint - координаты юнита
X_Enemy, Y_ Enemy - координаты врага
Speed - скорость снаряда
X_Vector, Y_Vector - вектор движения юнита за единицу времени (скорость)

Distance - расстояние от юнита до врага
Time - время полета снаряда до юнита
X_End, Y_End - точка где будет юнит при подлете снаряда


Distance = Sqrt( Sqr(X_Uint - X_Enemy) + Sqr(Y_Uint - Y_Enemy))
Time = Distance / Speed

X_End = X_Uint + X_Vector*Time
Y_End = Y_Uint + Y_Vector*Time

стреляй по точке (X_End, Y_End)

Расчет простой, но при большой скорости полета снаряда и большого числа снарядов попадет - это точно.
Для единичных снарядов меткость будет меньше - нечего врагу с первого выстрела попадать :)

P.S. А вообще это задача для зенитных комплексов - так что за более точными расчетами обращайся к военным :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо