在Box2D中,大型静态边缘地形的性能问题

5

我正在制作的游戏需要支持非常大的世界。通常情况下,这不是问题,因为我可以在不可见的情况下修剪大部分世界。然而,Box2D似乎不喜欢我的想法!

我的地形目前由约1000个边缘形状组成。这本身似乎没有问题,但是: 即使我只添加了几个(~25)动态对象(小圆),性能也会急剧下降!

  • 为什么会这样,动态树应该很早就取消所有未受影响的静态地形形状,并且没有性能惩罚,不是吗?
  • 我该如何解决这个问题?

1
我相信这个问题已经在 Box2D svn 中得到解决。除了更新最新的 Box2D 代码之外,你可能无法绕过它。 - iforce2d
1个回答

1
答案是因为边缘形状不会与其他边缘形状发生碰撞。
来自手册的说明:
边缘形状是线段。这些被提供来帮助制作游戏中的自由静态环境。边缘形状的一个主要限制是它们可以与圆形和多边形发生碰撞,但不能互相碰撞。Box2D使用的碰撞算法要求至少两个碰撞形状中的一个具有体积。边缘形状没有体积,因此无法进行边缘-边缘碰撞。
因此,即使您有许多边缘形状,由于它们彼此不会发生碰撞,因此您不会看到性能下降。一旦添加了一些对象,那么Box2d开始检查碰撞。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接