用于C ++ 2D游戏引擎的Chipmunk Physics或Box2D?

时间:2010-04-25 04:05:40

标签: c++ iphone physics game-engine

我正在开发它变成一个“跨平台”2D游戏引擎,我的初始平台目标是iPhone OS,但可以转移到Android甚至某些控制台,如PSP,或任天堂DS,我想保持我的选择。

我的引擎是用C ++开发的,并且已经阅读了很多关于Box2D和Chipmunk的内容,但我还是无法决定使用哪个作为我的物理中间件。

Chipmunk似乎很容易嵌入,Box2D似乎被广泛使用。 Chipmunk是C,而Box2D是C ++,但我听说Box2D的API比chipmunk的API差得多。

目前我将使用不规则多边形(非凹面)的引擎形状创建和碰撞检测功能。

我重视:

1) Good API's
2) Easy to integrate.
3) Portability.

当然,如果您发现其他任何事情,我很乐意听到它。

您认为哪一种更适合我的需求?

编辑:我最后写了一篇关于我的特定选择的文章,你可以找到它here

3 个答案:

答案 0 :(得分:6)

我使用两者,但是当我可以选择时,我会选择花栗鼠,它有更好的API,并且更容易学习......

但那是因为我学会了它而不需要社区,手册完全没问题。

更新:我目前的游戏正在使用Box2D,我希望我用它来使用Chipmunk ...主要是因为Box2D有两个严重的问题,在我的游戏中加剧了:首先,它有一个真正的旧bug,其中的对象“阻碍“在角落里,我的比赛是一场突破性的比赛,所以当球在墙上”滚动“时,有时它会扯开并被扔离墙壁,很多人都会问为什么我的游戏物理看起来是”随机的“。

Box2D的其他问题是它如何存储对象,Chipmunk使用空间哈希,Box2D使用二叉树,我的游戏在大量物体的水平上有大量减速,我问Erin(Box2D的作者)原因,他解释说因为Box2D使用二叉树,如果你把对象放在一个网格中(就像我说的那样,我的游戏是一个突破性的克隆!一切都在网格中!)树变得不平衡,Box2D变慢了。我的游戏的解决方案是将一些级别变成“棋盘”模式以避免这个问题。

所以,对于所有基于平铺的游戏,我将只使用Chipmunk,Box2D REALLY不适合那些(因为在瓷砖角落上的“障碍”,以及瓦片网格的减速错误)

答案 1 :(得分:4)

你是对的,花栗鼠已经开发出来,改善了很多Box2D倒塌的地方。

然而,Box2D绝对是更成熟的平台,根据我个人的经验,在决定使用哪种引擎时,我发现Box2D有一个更大的社区跟随,所以通过示例更容易学习。

答案 2 :(得分:2)

Chipmunk是直的C,而Box2D是C ++。还有一套新的Objective-C bindings用于Chipmunk,但它们不能自由使用。

据我了解,Chipmunk不支持连续碰撞检测,但Box2D支持。这对于防止“隧道效应”(物体在高速移动时略微穿过彼此)非常重要。

在一天结束时,从我听到的情况来看,他们都很棒。如果您更喜欢C ++到C或需要连续碰撞检测,您应该选择Box2D。

如果您更愿意使用纯C库,请使用Chipmunk。

我个人使用Box2D,到目前为止我的经验非常棒。

另外,我认为Box2D有一组不同的(可能更大的)关节类型,所以可以考虑......