среда, 26 июня 2013 г.

Записки программиста #1. Физика

Как я уже говорил в прошлой статье из цикла «Записки программиста» передо мной встал серьезный вопрос, использовать готовый движок или допиливать свой в игре «AlienStorm».
Пару слов о существующем движке, «земля» создается случайно исходя из минимальных и максимальных характеристик. Ландшафт не равномерный, неровности, располагаются случайно и в случайном количестве, за финальный проход неровности сглаживаются. Минус такого подхода - на каждую карту создается свой атлас неровностей и их маска. Конечно, можно использовать и попиксельную проверку, но тк массив для проверки довольно большой выходит, то на основании полученной маски мы создаем прямоугольники, по которым уже с которым мы уже и считаем пересечения.
Для движения по ним, мы соединяем центры этих прямоугольников, напомню, что прямоугольники уже сглажены по определенным условиям.  Пример этого и показан на рисунке:



Любой движущийся по ним объект имеет две нижние, крайние точки.  Схема не особо сложная и она удовлетворяла начальным условиям, но запросы стали расти.
Для 2д + XNA есть два физических движка: box2d и farseer.
Они оба базируются на С++ версии box2d, но farseer довольно давно двигается в свою сторону, да и шустро. Так что для сравнения я взял farseer.
«+» готового движка (исключительно для меня):
  • покрытие всех задач связанных с физикой;
  • код более-менее уже стабильный;

«-» готового движка:
  • непонимание его работы;
  • отсутствие опыта работы с ним и как следствие возможные не предвиденные проблемы;
  • сложность его внедрения в существующую архитектуру;
  • непонятные вопросы как сделано то, или иное;
  • вопрос с производительность;

Минусов оказалось больше и конечно эти минусы можно назвать притянутыми, но для меня они все-таки минусы. Было решено допиливать свой движок.
Шла осень, проблемы в финансовом плане на работе становились все острее, к счастью поступило предложение, о новой работе, от которого я не смог отказаться. Новая работа, это новый коллектив, новые требования к работе, новые задания. Задания довольно интересные и времени на свои проекты совершенно не осталось, но не спеша я стал решать задачу со своим физическим движком. Так плавно подступила зима, время пролетело незаметно, иногда конечно приходилось отвлекаться на другие свои проекты и идеи. В новогодние праздники я решил вплотную заняться физикой, это уже была 7 версия данного движка. Если в начале, я старался писать и придумывать все сам, с нуля, то теперь я стал все больше смотреть, как это сделано у других. В результате через некоторое время я вернулся к первому своему вопросу, продолжать допиливать движок или взять готовый, правда и изменились и минусы, с большинством я уже разобрался, пока писал свой…
Остался только последний, вопрос производительности, подходя к делу с некоторым недоверием, я сперва посмотрел демонстрации, и поскольку, не зная способа лучше, стал его «трогать».
В целом он мне понравился, и было решено использовать его в качестве основы, и все-таки пришлось решать много новых задач, но процесс двигался, жалко, что новогодние праздники такие короткие. Итог моих новогодних каникул:



Как итог новогодних каникул - с физикой определился, но снова работа, семейная жизнь, работа над приложением «Слова любимым» - ни минутки покоя  =)
 Работа встала на не определенный срок.
И только поздней весной удалось снова к нему вернуться. Поскольку прошло довольно много времени, осмысление проекта стало более явно. Все это время я старался все идеи, мысли записывать, тем самым появилась точная цель,  что же я хочу видеть в итоге и когда, это что-то должно появиться на свет.
Если раньше целевая платформа была Windows Phone 7, то хорошо подумав, стало ясно, что делать уже нужно Windows Phone 7/8 + Windows 8, так же следовало сразу рассмотреть вопрос о портировании на другие платформы. О этих тяжких думах я расскажу в следующей статье.

Комментариев нет:

Отправить комментарий