Как я уже
говорил в прошлой статье из цикла «Записки программиста» передо мной встал серьезный вопрос, использовать готовый движок или допиливать
свой в игре «AlienStorm».
Пару слов о
существующем движке, «земля» создается случайно исходя из минимальных и
максимальных характеристик. Ландшафт не равномерный, неровности, располагаются
случайно и в случайном количестве, за финальный проход неровности сглаживаются.
Минус такого подхода - на каждую карту создается свой атлас неровностей и их
маска. Конечно, можно использовать и попиксельную проверку, но тк массив для
проверки довольно большой выходит, то на основании полученной маски мы создаем
прямоугольники, по которым уже с которым мы уже и считаем пересечения.
Для движения
по ним, мы соединяем центры этих прямоугольников, напомню, что прямоугольники
уже сглажены по определенным условиям.
Пример этого и показан на рисунке:
Любой
движущийся по ним объект имеет две нижние, крайние точки. Схема не особо сложная и она удовлетворяла
начальным условиям, но запросы стали расти.
Для 2д + XNA есть два физических движка: box2d и farseer.
Они оба базируются
на С++ версии box2d, но farseer довольно давно двигается в свою сторону, да и шустро. Так
что для сравнения я взял farseer.
«+» готового
движка (исключительно для меня):
- покрытие всех задач связанных с физикой;
- код более-менее уже стабильный;
«-» готового
движка:
- непонимание его работы;
- отсутствие опыта работы с ним и как следствие возможные не предвиденные проблемы;
- сложность его внедрения в существующую архитектуру;
- непонятные вопросы как сделано то, или иное;
- вопрос с производительность;
Минусов
оказалось больше и конечно эти минусы можно назвать притянутыми, но для меня
они все-таки минусы. Было решено допиливать свой движок.
Шла осень,
проблемы в финансовом плане на работе становились все острее, к счастью
поступило предложение, о новой работе, от которого я не смог отказаться. Новая
работа, это новый коллектив, новые требования к работе, новые задания. Задания
довольно интересные и времени на свои проекты совершенно не осталось, но не
спеша я стал решать задачу со своим физическим движком. Так плавно подступила
зима, время пролетело незаметно, иногда конечно приходилось отвлекаться на
другие свои проекты и идеи. В новогодние праздники я решил вплотную заняться
физикой, это уже была 7 версия данного движка. Если в начале, я старался писать
и придумывать все сам, с нуля, то теперь я стал все больше смотреть, как это
сделано у других. В результате через некоторое время я вернулся к первому
своему вопросу, продолжать допиливать движок или взять готовый, правда и
изменились и минусы, с большинством я уже разобрался, пока писал свой…
Остался
только последний, вопрос производительности, подходя к делу с некоторым
недоверием, я сперва посмотрел демонстрации, и поскольку, не зная способа
лучше, стал его «трогать».
В целом он
мне понравился, и было решено использовать его в качестве основы, и все-таки
пришлось решать много новых задач, но процесс двигался, жалко, что новогодние
праздники такие короткие. Итог моих новогодних каникул:
Как итог
новогодних каникул - с физикой определился, но снова работа, семейная жизнь,
работа над приложением «Слова любимым» - ни минутки покоя =)
Работа встала на не определенный срок.
И только
поздней весной удалось снова к нему вернуться. Поскольку прошло довольно много
времени, осмысление проекта стало более явно. Все это время я старался все
идеи, мысли записывать, тем самым появилась точная цель, что же я хочу видеть в итоге и когда, это
что-то должно появиться на свет.
Если раньше
целевая платформа была Windows Phone 7, то хорошо подумав, стало ясно,
что делать уже нужно Windows Phone 7/8 + Windows 8, так же следовало сразу
рассмотреть вопрос о портировании на другие платформы. О этих тяжких думах я
расскажу в следующей статье.
Комментариев нет:
Отправить комментарий