使用花栗鼠的问题

时间:2009-11-10 08:41:15

标签: iphone iphone-sdk-3.0 cocos2d-iphone chipmunk

我做了一个游戏,使用可以通过触摸屏幕向左或向右移动的角色,在角色上方,它是一个苹果,我需要的是苹果会掉下来,角色可能会再次推动苹果喜欢打排球。 这就是问题,我从“边界球”中学到的是给精灵一个形状和身体,然后它们会自动碰撞,当我给角色赋予形状和身体,动画不起作用,角色移动后第二个他“跳”到起点,无论我使用setPosition还是Action(MoveTo)来实现精灵都没用 移动身体也不行。我使用touchmoved来设置body-> p,它一直在摇晃,当我松开按钮时,它“飞”了一直出界.......... 任何人都可以告诉我应该怎么做或给出类似的例子(例如排球等等),Plx帮助!!!

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

2 个答案:

答案 0 :(得分:5)

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

使用物理引擎,例如花栗鼠,可能有点令人生畏。它有助于启用调试绘图。看看你如何才能做到最好!您可以从cocos2d chipmunk示例中获取一些代码,该代码附带正常的cocos2d下载)

我认为你已经添加了一个“地面”形状作为静态形状并具有重力设置?

使用body->p = cpv(x,y);移动物体时,问题是您不会更改除物体位置以外的物体状态。对物理引擎来说,就像你传送物体一样。如果物体掉落,它仍然会掉落。

所以现在,你坠落的物体不会碰到地面。它的速度提高了。你再次“传送”它......但是直到碰到任何东西,重力会不断增加它的下降速度。

因此,如果您将一个物体移动到另一个点,请务必重置该物体上的所有力和速度,如果需要这样做的话!

比使用body->p更好的方法是use these functions

  • void cpBodySlew(cpBody * body,cpVect pos,cpFloat dt)
  • void cpBodyUpdateVelocity(cpBody * body,cpVect gravity,cpFloat damping,cpFloat dt)
  • void cpBodyUpdatePosition(cpBody * body,cpFloat dt)

The documentation of these functions不是太多了,但还有其他文件。给它一个谷歌:-p我还没有完全掌握使用这些功能(我仍然试图绕过花栗鼠)但是他们是解决它的方法。

或者你可以(而不是设置body->p)直接设置对象的速度(虽然cpBodySlew为你做这个)

答案 1 :(得分:1)

最新的花栗鼠代码在要抓取的物体和鼠标(触摸)之间使用枢轴关节进行此操作:ChipmunkDemo.c

另请参阅:Mouse interaction