1

我将 Chipmunk cocos2d 用于最终将是一个声音生成游戏,其中碰撞粒子会产生噪音。但是现在,我遇到了一个问题:我的粒子不断从地板上掉下来!

在示例“弹跳球”模板中,传入的加速度计流上的乘数相当低(大约 100.0f),但为了让事情真正快速做出反应,我正在加速它:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)accel
{   space->gravity = cpvmult(cpv(accel.x, accel.y), 10000.0f); // originally 100.0f
}

我发现这可以通过dt非常小来改善,轮询加速度计大约 1/240 秒。

这是最好的方法吗?有没有另一种方式对花栗鼠说“小心,这些东西移动得很快”?

4

1 回答 1

3

通常,许多物理引擎难以处理相对于其速度而言较小的快速移动物体之间的碰撞。我不知道 Chipmunk 的具体情况,但您的问题意味着在特定时间间隔会检查相交对象。如果对象移动得很快并且很小,则可能会跳过发生碰撞的时间间隔。

两个最简单的解决方案是使用更小的时间间隔,或者以某种方式使两个对象之一更大。你是如何代表楼层的?如果您可以将其表示为一个厚矩形,那也应该减少问题。

更难的解决方案是使用更复杂的交集算法,例如使用边界胶囊来表示两个样本之间的球体穿过的空间区域。如果 API 尚不支持这一点,则需要进行大量的数学运算和修改。

于 2011-02-13T18:08:02.783 回答