对于仅进行碰撞检测,Chipmunk和Box2d哪个工具更好?

6

针对基于Cocos2d的项目,我想仅使用物理工具包进行碰撞检测。使用Chipmunk或Box2d有哪些优缺点?


如果你不想处理物理学,为什么要包含整个库来处理它呢? - alex
虽然我不需要物理引擎,但我希望拥有一个易于使用的碰撞检测系统,这样我就不必自己编写了。包含工具包应该不会太难。 - Daniel Blezek
3
这是一个相当主观的问题,“更好”的指的是你可以最快学习和理解的那个。 - James Webster
cocos2d 0.5rc0声称它添加了一个基本的碰撞模块。你考虑过直接使用它吗? - Tony Adams
cocos2d 0.5 -> 只适用于我们谈论桌面计算机上的cocos2d(Python)。 - CodeSmile
2个回答

9
根据这个答案,Chipmunk不支持连续碰撞检测,但Box2D支持。这对于防止“隧道效应”(物体以高速移动时稍微穿过彼此)非常重要。
Steffen Itterheim在他的Box2D vs Chipmunk FAQ评论中澄清了这一点:如果您将使用非常快速移动的物理对象,例如“子弹”,请考虑使用Box2D,因为它可以执行扫描碰撞,即连续碰撞集成,以防止快速移动的物体深入穿透或甚至隧道穿过其他物体。 Chipmunk Collision Detection文档中讨论了separate()回调。两个形状在本步骤中第一次停止接触。但是我不确定这是否对其检测高速碰撞的能力有任何影响。
也有一个关于在打砖块游戏中使用Box2D的非常负面的意见我的当前游戏正在使用Box2D,我希望我同时使用Chipmunk...主要是因为Box2D有两个严重问题,在我的游戏中加剧了这些问题:首先,它有一个真正古老的错误,即对象会在角落处“卡住”,我的游戏是一个打砖块游戏,所以当球沿着墙壁“滚动”时,有时会被卡住并从墙上弹开,很多人问我为什么我的游戏物理看起来“随机”。 结论:我也感到困惑。

5

我们在谈论什么类型的碰撞?

如果您只需要以下内容:

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

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

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

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

基于使您工作更轻松的因素做出决定,而不是一些任意的、未定义的和高度主观的想法,即一个物理引擎可能比另一个更好,因为技术差异微小,只有在您非常了解自己的游戏设计和物理引擎内部算法的情况下,才能评估它们对游戏设计的影响。请保留HTML标记。

1
我最近在游戏中做了这件事,但我完全不建议这样做。Cocos2D在处理覆盖视图(如Game Center登录通知或任何iOS 5系统通知)时存在严重问题,导致更新方法跳过某些帧,从而偶尔出现安迪在他的答案中描述的“隧道”效果。除非您有大型物体缓慢移动,否则应使用具有良好碰撞检测的物理引擎。在Cocos2D的情况下,最好使用Box2D。 - Filip Radelic

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