Проблемы производительности с большими статическими ребрами местности в Box2D

Я хотел бы поддерживать очень большие миры в игре, которую я делаю. Обычно это не проблема, потому что я могу отобрать большую часть мира, так как он не виден сразу. Однако Box2D, похоже, не нравится моя идея!

Мой ландшафт в настоящее время состоит из около 1000 краевых форм. Однако это само по себе работает нормально: даже после того, как я добавлю всего несколько (~ 25) динамических объектов (маленькие круги), производительность резко снижается!

  • Почему это происходит, динамическое дерево должно отменять все незатронутые статические формы ландшафта очень рано и без потери производительности, не так ли?
  • (Как) я могу обойти это?

person Hero    schedule 22.05.2011    source источник
comment
Я считаю, что эта проблема была решена в Box2D svn. Вы, вероятно, не можете обойти это, кроме как обновить свой код Box2D до последней версии.   -  person iforce2d    schedule 16.06.2011


Ответы (1)


Ответ заключается в том, что формы ребер не сталкиваются с другими формами ребер.

Из руководства:

Формы краев представляют собой сегменты линий. Они предназначены для помощи в создании статической среды свободной формы для вашей игры. Основным ограничением форм ребер является то, что они могут сталкиваться с кругами и многоугольниками, но не с самими собой. Алгоритмы столкновений, используемые Box2D, требуют, чтобы по крайней мере одна из двух сталкивающихся фигур имела объем. Формы краев не имеют объема, поэтому столкновение краев невозможно.

Таким образом, несмотря на то, что у вас много форм краев, поскольку они не сталкиваются друг с другом, вы не видите падения производительности. Как только вы добавите несколько объектов, box2d начнет проверку на коллизии.

person Rahul Iyer    schedule 21.03.2017