Приветствуем, геймер! Ты можешь или
16+
Storyteller_by_bitrix_studio

Геймер Havoc 21

10

Дневник разработчиков №8: баллистика и снаряды

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Прошла очередная неделя, и Sauropod Team еще ближе подобрались к кикстартеру. Они не могут сообщить точной даты, но уверяют, что она скоро появится и пользователи, читающие блог, узнают об этом за неделю до старта сбора пожертвований.

В целом эта неделя была очень продуктивной. Начата и/или закончена работа над многими важными фичами и интересностями. Вот список:

  • Закончена большая часть анимации для новой модели Бриктрона, включая несколько совершенно новых движений. Зауроподы также импортировали персонажа в движок игры, что позволит им сравнивать его со старым персонажем. Здесь еще нужно немного пощупать настройки, но большая часть работы позади. Ффухх!
  • Закончена отладка и начато настраивание поведения для динамического избегания препятствий Бриктронами. Теперь они обходят друг друга сразу как появляется такая возможность, и вообще избегают попадания в пробки когда это возможно. Они также делают легче свой путь в шахты, используя единственную автоматически созданную лестницу.
  • Введено небольшое веселое взаимодействие, когда Бриктроны могут обмениваться заданиями в случае, если они заблокировали друг другу проход. Отныне вы часто будете видеть Бриктронов, передающих блоки или сумки своим дружкам, что в целом ускоряет работу. Также вы увидите передаваемые по цепочке сумки на забитых лестничных пролетах, что являет собой довольно забавное зрелище. Персонально Жермен сильно впечатлен результатами. Они благодарят читателей своего блога за предложение этой идеи.
  • Началось создание модели плохого парня. Для показа еще ничего нет, но процесс двигается вполне прилично. Все, что можно пока сказать - это то, что получается ультра крутой мерзавец.
  • Создан алгоритм для подсчета баллистических углов, необходимых для поражение цели стрелой или катапультой. Разработчики очень близки к тому, чтобы засунуть это в игру, так что появление лучников неизбежно.

Кстати говоря, баллистика - тема блога этой недели. Дальше Жермен дает слово Бенуа, самому новому члену команды.

*Дальше идет физика. Хотя она довольно проста, но на случай, если кому-то неинтересно, я спрятал ее под спойлер.*

Баллистика, или как поражать одни вещи, метая в них другие

Сегодняшний урок - про баллистику снарядов. Это верно, мы будем говорить о лучниках и катапультах!

*** Внимание: впереди - уравнения! ***

Для тех, кто не делал физику в школе, Бенуа попытается быть как можно более простым в своих объяснениях, и от вас почти не потребуется фоновых знаний. Однако цель этого урока также в том, чтобы преподать основы другим игровым программистам-казуалам (или, возможно, профессионалам), так что в этом отношении Бенуа постарается быть как можно более полным по части основной математики.

Вы были предупреждены.

*Дальше повествование пойдет от лица Бенуа, уж очень много он говорит лично*

Базовая-пребазовая физика

Я уверен, все вы знакомы со следующей формулой:

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Расстояние (d) равняется скорости (v), умноженной на время (t)

Предположим, вы едете из города А в город Б, между которыми 320 км. Предположим также, что вы двигаетесь со средней скоростью 80 км в час. Тогда ваша поездка займет 4 часа. Довольно просто, верно?

Ну, верьте или нет, из этой простой формулы можно составить целую пачку формул для баллистики снаряда (без учета сопротивления воздуха)

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Здесь мы используем x и y как горизонтальную и вертикальную компоненты (составные части, проекции) перемещения снаряда через трехмерный мир. Мы можем рассматривать мир как двухмерную плоскость когда цель и снаряд выравняются относительно друг друга.

Все же я должен сказать, что применил здесь небольшую уловку. В моей маленькой формуле используется (v с чертой), средняя скорость. Это значит, что если вы по пути остановитесь на заправке или для того, чтобы перекусить, то ваша средняя скорость уменьшится соответственно, поэтому действительно содержит ужасно много информации.

К счастью, в мире снарядов очень просто предсказывать. Ваша окончательная скорость есть ваша начальная скорость плюс все ускорение, направленное вниз, которое вы накопили из-за силы гравитации (обозначенной символом g). Теперь ваша средняя скорость - это ваша начальная скорость плюс половина того же самого ускорения, направленного вниз.

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Теперь, когда у нас есть в выражениях, которые легко измерить,

мы можем подставить их в начальные формулы для x и y, получим:

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Стрелы

В Castle Story лучники могут выпускать стрелы в различные цели чтобы нанести им урон либо нейтрализовать их. Они могут стрелять под любым углом если решили, что это улучшит их шанс попадания в цель. Однако, они ограничены крепкостью своих луков и своей собственной физической силой. Мы решили, что главный механизм, отвечающий за луки и стрелы, будет в основном иметь дело с выбором соответствующего угла для стрельбы вместо изменения силы натяжения тетивы. Это также позволяет нам делать более простую анимацию для упомянутой тетивы, если мы знаем заранее, насколько она будет натянута.

Окей, вернемся к формулам.

Предположим что вы только что выпустили стрелу и смотрите на ее полет. Вы можете взглянуть на проекции скорости по x и y и описать ее "ориентацию". Вначале стрела направлена четко вверх, но так как гравитация снижает ее скорость по y, стрела начинает изменять свое направление все ниже и ниже к земле, все время сохраняя свою начальную скорость по x (считайте, горизонтальную скорость).

Угол наклона, под которым выпущена стрела, имеет огромное влияние на дистанцию, которую она преодолеет. Здесь представлены несколько траекторий, по которым может двигаться стрела:

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

В этой ситуации Бриктрон выпускает стрелу с силой 50 под углом 45°, и промахивается. Тогда он решает выстрелить под углом в 15° и опять промахивается.

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Бриктрон, озадаченный своими предыдущими неудачами, решает изменять свою силу натяжения вместо угла, и сначала применяет силу в 50 при угле 45°. Он промахивается и понимает, что это - то же самое, что он делал при своей первой попытке. В конце концов он решает выстрелить с силой 35, и снова стреляет мимо цели. Чувствуя себя несчастным, Бриктрон решает, что ему лучше было бы быть пехотинцем, а не лучником.

Представьте, что вы выпускаете стрелу под углом наклона в 30°. Назовем этот угол θ (фита). Что это значит в выражениях скорости стрелы по x и y? Что ж, у вашей стрелы будет одинаковая общая скорость вне зависимости от того, где вы ее выпускаете, так что давайте скажем, что она имеет начальную скорость v. Однако, если вы выпустите ее под углом 30°, лучшая часть ее скорости будет вложена в горизонтальную скорость и пройдет очень немного времени прежде чем стрела начнет клониться книзу. с другой стороны, если вы запустите ее, скажем, под углом 60°, случится обратное: стрела по-прежнему начнет полет со скоростью v, но будет лететь дольше до достижения земли, правда и горизонтальная скорость будет много меньше. Теперь это звучит очень неопределенно и общо. С использованием тригонометрических формул наши начальные уравнения становятся такими:

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Итак, какой угол наиболее всего подходит для поражения заданной цели? Как правило, 45° - это угол, при котором стрела летит дальше всего, хотя это не совсем верно для не плоского ландшафта. Но как мы сможем поразить предустановленную цель если она к нам ближе, чем та дальняя точка, доступная для угла 45°? Есть ли способ предсказать, куда нужно целиться?

Смотря на последние две формулы, мы видим, что осталось только две неизвестных, это θ и t. Так как у нас также есть два независимых уравнения, алгебра позволяет нам избавиться от t в обоих выражениях и, совершив соответствующие манипуляции и немного попотев, получить θ. Получившаяся формула большая и уродливая, но не паникуйте, она может с легкостью использоваться в манере plug-and-play в любом небольшом физическом движке с удивительными результатами (см. апплет ниже). Без дальнейшей суеты:

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Если кто-нибудь из вас интересуется алгеброй и нуждается в выведении формулы, в Википедии есть страница, посвященная траекториям снарядов, в которой все подробно объяснено.

Вернемся к большой формуле в последний раз и очень быстро разберем ее специально для тех программистов среди вас, кто захочет ее использовать. θ - угол наклона, который мы пытаемся вычислить. arctan - обратная функция к тригонометрической функции тангенса, которая, в свою очередь, является отношением функций синуса и косинуса для данного угла. Вообще, все математические программные библиотеки имеют готовые функции arctan или atan. Затем, у нас есть старая добрая v (скорость), которая обозначает начальную скорость стрелы. В нашем случае, это будет зависеть от силы, с которой Бриктрон выпускает стрелу, или от напряжения катапульты в момент выпуска снаряда. Наконец, у нас есть x и y, которые в данном случае означают горизонтальное расстояние, на котором отстоит цель, и высоту цели относительно стрелка, соответственно.

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

Катапульты

В то время как лучники могут менять свой угол стрельбы очень быстро и легко, катапульты - не могут. Их механизм сконструирован так, чтобы действовать под очень определенным углом, что-то вроде 45°, и метать любой снаряд вдоль относительно похожей траектории. Где катапульта изменяется - так это в отношении ее силы выстрела. Она не только может запускать объекты различной массы на различных скоростях, она также может быть отрегулирована Бриктроном чтобы выдать большую или меньшую силу выстрела за раз. Увеличение силы выстрела заставляет снаряд лететь дальше, а ее уменьшение заставляет его лететь ближе, что делает относительно легкой задачу по измерению того места, куда стреляет катапульта.

Следующая не такая уж простая формула вычисляет начальную скорость, которую должен иметь снаряд чтобы достичь определенной точки в пространстве (на горизонтальном расстоянии x и высоте y, при прицеливании на угол θ).

Дневник разработчиков №8: баллистика и снаряды
Castle Story - Дневник разработчиков №8: баллистика и снарядыДневник разработчиков №8: баллистика и снаряды

Попробуйте сами!

Мы сделали маленький апплет, который позволит вам немножко поиграться с углом и силой выстрела, если хотите. Нажмите внутри прямоугольника чтобы изменить позицию цели. Валяйте!

*В целом, если сказать кратко, в Castle Story будет присутствовать довольно реалистичная модель стрельбы из лука и катапульты, т.е. на месте будет производиться вычисление угла или силы для выстрела и "стрельба наперед", если цель двигается. В отличие от классических стратегий, где приказываешь стрелку атаковать - и он, как только цель появляется в зоне атаки, долбит ее постоянными попаданиями, здесь будет вполне реальная возможность уклоняться от стрел, стрелы будут иметь отдельные, не зависящие от стрелка или цели физические тела.

Анимация полета стрелы, видимо, будет всегда зависеть от расположения цели (не учитывая, правда, поправки на ветер и сопротивление воздуха), что-то похожее на стрельбу лучников в Stronghold.*

Как бы то ни было, это все для дневника этой недели.

Переводы прошлых дневников

10
Еще в блоге
Интересное на Gamer.ru

7 комментариев к «Дневник разработчиков №8: баллистика и снаряды»

    Загружается
Чат