Farseer Physics и XNA

Решил переделать свой арканоид и вместо собственной физики использовать 2D физический движок Farseer Physics. Это наиболее распространённый физический движок для C# ( в частности под XNA). Подключить был довольно просто - в комплекте идёт готовый пример использования, однако сразу столкнулся с первыми трудностями.

Основная проблема с которой я столкнулся - это появление исключения ArithmeticException в методе вычисления угловой скорости (AngularVelocity). Что самое обидное было - это то, что исключения возникало не сразу, а в процессе игры. Долгие поиски причины не привели к решению проблемы, однако путём тыка ( самый действенный метод ) ошибка была устранена.

Причиной такого поведения был факт того, что я не устанавливал MomentOfInertia для создаваемых тел. В результате данный параметр вычислялся автоматически движком и очевидно его значение превышало возможности движка. В результате я выставил вручную данный параметр в 1 и ошибка больше не появлялась. Данный параметр показывает насколько будет закручиваться обьект при ударении с другим обьектом. Для моей игры этот параметр не является существенным и поэтому я не сильно заботился его правильным значением.

В общем данный движок довольно удобный. В комплект входит визуализатор физики - он конкретно упрощает жизнь в процессе дебага. Кроме того движок постоянно развивается - на данный момент стабильная версия 2.1.3, но уже в ближайщем будующем обещают появление 3-й версии движка с новыми плюшками и фишками.

Так что если нужна физика для Silverlight, XNA или WPF - рекомендую http://farseerphysics.codeplex.com/

Комментарии

Популярные сообщения из этого блога

Структуры данных ( АВЛ-дерево , обход графа и построение минимального остовного дерева графа)

2D Физика для игр - Separate Axis Theorem

Взлом алгоритма Эль-Гамаль( с помощью алгоритма Шенкса)