Я успешно использовал Farseer для разработки одной из моих игр с использованием XNA. Игра работает как шарм в Windows и WP7. В настоящее время я работаю над переносом моей игры в IOS, используя Monotouch и Monogame. Я успешно скомпилировал и использовал Farseer также над первой версией моей игры, портированной через Monotouch и Monogame. Все работает хорошо, за исключением производительности. Игра работает намного медленнее на устройстве iPhone. Я провел некоторые исследования кода, и кажется, что основным узким местом является Farseer. Он становится очень медленным, когда ему приходится управлять более чем 5-6 телами с одним прикрепленным приспособлением (кругом).
Читая документацию, я заметил, что для настройки Farseer я могу изменить значения в статическом классе Setting:
Производительность
Для того, чтобы получить максимальную отдачу от движка, вы должны попытаться следовать следующим рекомендациям:
Включить сон Сон позволяет вам иметь большое количество тел в мире. Он также может повысить стабильность движка, поскольку небольшие движения в стопке тел не распространяются в стопке. Спящее тело имеет небольшие накладные расходы, поэтому рекомендуется его включить.
Отключить CCD Непрерывное обнаружение столкновений предотвращает туннелирование, но ценой снижения производительности. Если у вас нет проблем с туннелированием, вам следует отключить CCD совсем.
Минимизировать число итераций положения и скорости Большое число итераций делает двигатель более стабильным за счет снижения производительности. Вы должны подстроить эти значения под вашу игру.
Плохая новость заключается в том, что если я изменю любое значение этого класса, ничего не произойдет. Я пытался изменить значения следующим образом:
EnableDiagnostics = false
VelocityIterations = 6
PositionIterations = 2
ContinuousPhysics = false
Я пробовал также с меньшими значениями, например VelocityIterations = 1, но ничего не изменилось.
Кто-нибудь уже менял значения класса Settings для улучшения производительности?