6

对于基于 Cocos2d 的项目,我只想使用物理工具包进行碰撞检测。使用 Chipmunk 或 Box2d 的优缺点是什么?

4

2 回答 2

9

根据这个答案 Chipmunk 不支持连续碰撞检测,但 Box2D 支持。这对于防止“隧道效应”(高速移动时物体稍微穿过彼此)很重要

Steffen Itterheim 对他的Box2D vs Chipmunk FAQ的评论澄清了这一点: 如果您将拥有非常快速移动的物理对象,例如“子弹”,请考虑使用 Box2D,因为它可以进行扫掠碰撞,也就是连续碰撞集成,以防止快速移动的对象从深度穿透甚至隧道穿过其他物体。

Chipmunk Collision Detection文档讨论了回调separate()这一步,两个形状刚刚停止了第一次接触。但我不清楚这是否对他们快速检测碰撞的能力有任何影响。

对使用 Box2D 进行突破性游戏也有非常负面的看法我目前的游戏正在使用 Box2D,我希望我使用 Chipmunk... 主要是因为 Box2D 有两个严重的问题,这在我的游戏中加剧了:首先,它有一个非常老的错误,即物体在角落“卡住”,我的游戏是一个突破游戏,所以当球沿着墙壁“滚动”时,有时它会卡住并从墙上扔掉,很多人问为什么我的游戏物理学看起来“随机”。

结论:我也很困惑。

于 2011-12-21T00:26:59.337 回答
5

我们在谈论什么样的碰撞?

如果您只需要这些:

  • 矩形相交矩形-> CGRectIntersectsRect(..)
  • 矩形中的点-> CGRectContainsPoint(..)
  • 半径相交(即两点的距离)-> ccpDistance(..)

那么你根本不需要物理引擎,也不需要编写自己的碰撞检测算法。

Chipmunk 和 Box2D 处理碰撞的能力同样出色。我认为,如果有人问“哪个更好”,那对您来说并不重要。相反,问问自己你是否更喜欢使用 C (Chipmunk) 或 C++ (Box2D)。

同样,您更喜欢使用面向对象的冗长 API (Box2D) 还是功能性、高度缩写的 API (Chipmunk)?

你的决定基于什么让你更容易使用,而不是一些武断的、未定义的和高度主观的想法,即一种物理引擎是否比另一种更好,因为技术差异是微不足道的,你只能评估它们对如果您都非常了解自己的游戏设计和物理引擎内部算法,那么您的游戏设计。

于 2011-10-11T13:12:33.777 回答