2011-10-06 71 views
6

对于基于Cocos2d的项目,我只想使用物理工具箱进行碰撞检测。使用Chipmunk或Box2d有什么优点/缺点?仅限于碰撞检测,Chipmunk或Box2d是更好的工具吗?

+0

如果你不想处理物理,为什么要包括整个图书馆呢? – alex

+0

虽然我不需要物理学,但我想有一个易于使用的碰撞检测系统,所以我不必自己写。包括一个工具包不应该是一个很大的问题。 –

+3

相当一个主观的问题,“更好”的一个是你可以学习速度最快和理解最好的一个。 –

回答

4

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

如果你需要的是这些:

  • RECT RECT相交 - > CGRectIntersectsRect(..)
  • 点RECT - > CGRectContainsPoint(..)
  • 半径相交(即两个距离点) - > ccpDistance(..)

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

花栗鼠和Box2D同样处理碰撞。我认为如果有人问“哪个更好”,这对你来说不会有什么影响。相反,问问自己,你是否更喜欢使用C(Chipmunk)或C++(Box2D)。

同样,你喜欢使用object-oriented, verbose API(Box2D)还是functional, highly abbreviated API(Chipmunk)?

根据你决定什么使得它更容易处理,而不是一个任意的,未定义的,和主观性强的想法,即一个物理引擎是否可能比另一个物理引擎更好,因为技术差异很小,你只能评估他们对游戏设计的影响,如果你们都知道你自己的游戏设计和物理引擎的内部算法真的很好。

+1

我最近在游戏中做过这个,我不会推荐它。 Cocos2D存在严重的问题,例如Game Center登录通知或任何iOS 5系统通知等重叠视图,您的更新方法会跳过一些帧,导致偶然的“隧道效应”,Andy在他的答案中描述。除非你有很大的物体缓慢移动,否则你应该使用物理引擎进行正确的碰撞检测。在Cocos2D的情况下,最好使用Box2D。 –

9

根据this answer花栗鼠不支持连续碰撞检测,但Box2D的确如此。这一点很重要,以防止“隧道”

这是由斯蒂芬Itterheim的评论澄清他Box2D vs Chipmunk FAQ(物体高速移动时,稍微经过海誓山盟):如果你将不得不非常快速移动的物理对象,例如“子弹”,考虑使用Box2D,因为它可以扫描碰撞,即连续碰撞集成,以防止快速移动的物体深入穿透甚至穿透其他物体。

Chipmunk Collision Detection docs讨论一个separate()回调。 两个形状刚刚停止触摸第一次这一步。,但我不清楚这是否能够以高速检测碰撞。

也有使用Box2D的一个突围赛我现在的游戏是使用Box2D的一个very negative opinion,我希望我用花栗鼠吧......主要是因为Box2D中有两个严重的问题,正在于自己的比赛而加剧:首先,它有一个非常古老的问题,即物体在角落处“绊脚”,我的比赛是一场突破性的比赛,所以当球沿着墙壁“滚动”时,有时会被挡在墙上,很多人会问为什么我的游戏物理看起来“随机”。

结论:我也很困惑。