![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Стрельба с упреждением
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. А вообще это задача для зенитных комплексов - так что за более точными расчетами обращайся к военным :)