【问题标题】:Problem using chipmunk使用花栗鼠的问题
【发布时间】:2009-11-10 08:41:14
【问题描述】:

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

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

【问题讨论】:

  • 请尝试让您的问题更易于阅读。这将为您带来更多的浏览量并增加您获得正确答案的机会。

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


【解决方案1】:

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

使用诸如花栗鼠之类的物理引擎可能有点令人生畏。它有助于启用调试绘图。看看如何才能最好地做到这一点!您可以从 cocos2d 花栗鼠示例中获取一些代码,这些代码随普通 cocos2d 下载提供)

我认为您已将“地面”形状添加为静态形状并设置了重力?

当你用body->p = cpv(x,y); 移动一个物体时,问题是你不能改变物体的状态而不是它的位置。对于物理引擎来说,这就像你传送物体一样。如果物体在下落,它仍然会下落。

所以现在,你坠落的物体没有接触到地面。它的速度增加。你再次“传送”它......但在它撞到任何东西之前,重力会不断增加它的下落速度。

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

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

  • void cpBodySlew(cpBody *body, cpVect pos, cpFloat dt)
  • void cpBodyUpdateVelocity(cpBody *body, cpVect 重力, cpFloat 阻尼, cpFloat dt)
  • void cpBodyUpdatePosition(cpBody *body, cpFloat dt)

The documentation of these functions 不是太复杂,但还有其他文档。给它一个谷歌:-p 我还没有完全掌握使用这些功能(我还在尝试绕过 Chipmunk),但它们是解决它的方法。

或者,您可以(而不是设置body->p)直接设置对象的速度(尽管 cpBodySlew 会为您执行此操作)

【讨论】:

    【解决方案2】:

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

    另见:Mouse interaction

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多