为精灵添加花栗鼠的身体和形状并不是解决此问题的最佳方法。尽量不要从屏幕的角度思考!相反,创建一个包含对物理体和精灵的引用的控制器。
使用诸如花栗鼠之类的物理引擎可能有点令人生畏。它有助于启用调试绘图。看看如何才能最好地做到这一点!您可以从 cocos2d 花栗鼠示例中获取一些代码,这些代码随普通 cocos2d 下载提供)
我认为您已将“地面”形状添加为静态形状并设置了重力?
当你移动一个物体时body->p = cpv(x,y);
,问题是你除了它的位置之外没有改变物体的状态。对于物理引擎来说,这就像你传送物体一样。如果物体在下落,它仍然会下落。
所以现在,你坠落的物体没有接触到地面。它的速度增加。你再次“传送”它......但在它撞到任何东西之前,重力会不断增加它的下落速度。
因此,如果您将一个物体移动到另一个点,请务必重置该物体上的所有力和速度,如果需要这样做的话!
比 using 更好的方法body->p
是使用这些函数:
- void cpBodySlew(cpBody *body, cpVect pos, cpFloat dt)
- void cpBodyUpdateVelocity(cpBody *body,cpVect 重力,cpFloat 阻尼,cpFloat dt)
- 无效 cpBodyUpdatePosition(cpBody *body, cpFloat dt)
这些函数的文档并不太复杂,但还有其他文档。给它一个谷歌:-p 我还没有完全掌握使用这些功能(我仍在尝试绕过 Chipmunk),但它们是解决问题的方法。
或者,您可以(而不是设置body->p
)直接设置对象的速度(尽管 cpBodySlew 为您执行此操作)