1

我做了一个游戏,使用一个可以通过触摸屏幕向左或向右移动的角色,在角色上方是一个苹果,我需要的是苹果会掉下来,角色可以像打排球一样再次将苹果推起来. 这就是问题所在,我从“bounding ball”中学到的是给精灵一个形状和身体,然后它们会自动碰撞,当我给角色形状和身体时,动画不起作用,角色移动了第二他“跳”到起点,无论我使用setPosition或Action(MoveTo)来精灵也无用移动身体也不起作用。我使用touchmoved设置body-> p,它一直在摇晃,当我释放时按钮,它“飞”总是越界............谁能告诉我我该怎么做或举一个类似的例子(例如

我很感激,如果有人能帮我一把。

4

2 回答 2

5

为精灵添加花栗鼠的身体和形状并不是解决此问题的最佳方法。尽量不要从屏幕的角度思考!相反,创建一个包含对物理体和精灵的引用的控制器。

使用诸如花栗鼠之类的物理引擎可能有点令人生畏。它有助于启用调试绘图。看看如何才能最好地做到这一点!您可以从 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 为您执行此操作)

于 2009-11-18T17:03:12.600 回答
1

最新的花栗鼠代码通过在要抓取的对象和鼠标(触摸)之间的枢轴关节来执行此操作:ChipmunkDemo.c

另请参阅:鼠标交互

于 2009-12-24T19:43:50.253 回答