Войти
ПрограммированиеФорумОбщее

Алгоритм боя в космосе. Вопросы.

#0
0:38, 27 авг. 2009

Привет всем!
Пробую написать космическую стрелялку на Блице с использованием Ньютона.
Столкнулся с проблемой космических боев для кораблей НПС'ов.
Алгоритм боя следующий (разделен на фазы):
1 фаза- выпавнивание корабля на противника
2 фаза- сближение(скорость повыщена)
3 фаза- атака (скорость слегка снижена+стрельба)
4 фаза- уклонение
5 фаза- движение от цели в некую точку(расстояние от цели до этой точки чуть больше дистанции поражения орудий)
1 фаза- ... и так далее
Вроде бы все должно проходить гладко, но этот алгоритм я разрабатывал еще для ГеймМейкера. Там в 2Д он работал безукоризненно, но в 3Д проявляются некоторые проблемы: во-первых выравнивание носа корабля в 3Д на некоторую точку в пространстве несколько сложновато(ИМХО). Мой алгоритм выравнивания работает в ~95% случаев.
Алгоритм выравнивания на цель:
Roll: выравнивание по оси Z(имеется ввиду вращение по этой оси) происходит постоянно вне зависимости от положения цели, т.е. корабль всегда стремится выровняться параллельно плоскости эклиптики.
Yaw: выравнивание на цель по оси Y происходит из мат. рассчета в какую сторону ближе вращаться, чтобы достигнуть угла на цель.(здесь проблем не возникает)
Pitch: самый геморой сдесь :(. Пооси  Х выравнивание ограничено до +-80 градусов, т.к. корабль обладает инерцией вращения, и запросто может проскочить отметку в +-90 градусов, следовательно Yaw корабля изменится на 180 градусов.
Замечались проблемы когда координаты Y и Z цели и корабля совпадали, Х был отличен от нуля, то выравнивание Pitch не происходило, значение получалось произвольное в пределах от -90 до +90. Следовательно корабль улетал от цели не пытаясь больше изменять курс.
Теперь вопросы:
1. Кто-нибудь сталкивался с этом? Если да, то можно ли сзглянуть на код(даже усли он не на блице)(но желательно все таки на блице) ?
2. Было замечено, что корабли часто промахиваются. Как вариант я подумываю об маленькой хитрости. Даже если корабль НПС нацелен не точно, то при выстреле снаряды будут выравниваться на цель(конечно в разумных пределах).
Делают ли так в играх(Х2, Х3)?

Спасибо всем у кого получилось разобраться в том, что я написал.
И огромное спасибо всем кто ответил.

З.Ы. Извиняюсь, если буду не своевременно отвечать на посты - поблемы с трафиком( у меня gprs)


#1
0:49, 27 авг. 2009

кватернионы?

#2
1:04, 27 авг. 2009

Юзай AlignToVector.
Можно прямо на энтити цели или для пущего реализма направлять на пивот, который слегка рандомно смещен относительно цели (не все же пилоты супер-мега-точные).
Надеюсь, идея ясна.

#3
1:40, 27 авг. 2009

Sh.Tac.
> кватернионы?
Не знаю как их здесь применить, но если можно пример..

.Squid
> Юзай AlignToVector.
Не подходит.
Забыл уточнить, что и Игрок и НПС управляют кораблями с помощю флагов, т.е. RotateX=1 - корабль задирает нос, RotateX=-1 - опускает нос, RotateX=0 - нет вращения. И так далее. Т.е. просто выровнять корабль с помощью AlignToVector нельзя, да и Ньютон не любит, когда ему насильно указавают такие параметры. Как уже писалось выше, происходит проверка в какую сторону ближе вращаться и  RotateX, RotateY, RotateZ принимают значения положительные либо отритцательные.

#4
1:41, 27 авг. 2009

Вот пример:
Пример космического боя

#5
11:55, 27 авг. 2009

Ну.. мучайся дальше.

#6
15:38, 27 авг. 2009

Вобщем, с первым вопросом все ясно.
Может, кто-нибудь знает ответ на второй вопрос.

#7
17:01, 27 авг. 2009

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

#8
22:35, 27 авг. 2009

на второй вопрос: если делать честно, то стрелять нужно на опережение, а если с фейком, то подруливать ракеты на цель.

#9
0:52, 28 авг. 2009

Lastrick
AlignToVector я решил не использовать. Но мне повезло... Набрав слово Delta авто подстановка выдала команды DeltaYaw и DeltaPitch. Переписал алгоритм целиком, используя эти функции. В итоге код уменьшился в строках процентов на 70, да и работать стал быстрее. Нужно только найти способ подруливать помягче. Уже есть пара идей.

#10
10:01, 28 авг. 2009

MadMax
> на второй вопрос

Проблема, если использовать принципы аркад (именно) так.
_ф) Сегодняшние ракеты и лазеры* будут работать иначе в разных условиях и местонахождения в космосе.
Если пытаться (как принято в играх) изобразить, то... может лучше просто ввести алгоритм "умелости" НПСов?!
Визуально - пусть хоть куда "летит снаряд", а попадания фиксируем от навыка НПС - шанс попадания (учитывая некую переменную Действий Игрока)...

==
В один день схожие проекты:)

#11
19:01, 28 авг. 2009

D-Prince
> может лучше просто ввести алгоритм "умелости" НПСов?!
Навыки у НПС будут, но от них будет зависеть точность наведения корабля на цель и др. Но я просто думал сделать, чтобы ИИ немного "хитрил", т.е. даже при не совсем точной наводке, траектория полета снаряда слегка подправлялась в сторону цели.
> Визуально - пусть хоть куда "летит снаряд", а попадания фиксируем от навыка НПС
> - шанс попадания (учитывая некую переменную Действий Игрока)...
Такой вариант, лично мне, не очень нравится в играх.

ПрограммированиеФорумОбщее

Тема в архиве.