【问题标题】:sprite hit a wall or another sprite精灵撞墙或其他精灵
【发布时间】:2011-06-24 17:02:48
【问题描述】:

我试图了解当精灵撞墙时如何实现精灵的物理特性。 假设我有一堵墙,一个精灵正在使用box2d(cocos2d)以速度和重力撞墙,什么是最简单的方法来应用物理撞击旁边发生的事情,重新调整速度,重力,角度碰撞等?联系听众?我必须自己计算接下来会发生什么并对身体施加新的速度和力量吗? 还是 box2d 为我做的?

任何方向都会很棒。 谢谢。

【问题讨论】:

  • 有使用cocos2d自带的box2d的例子。看看他们

标签: cocos2d-iphone box2d


【解决方案1】:

box2d 为您计算一切。您不必担心两个物体碰撞后会发生什么。

如果您的身体撞到地面,它会作为自然反应弹跳。您不必施加与重力相反的新力。所有计算均由 box2d 物理引擎完成。物理引擎就是为此而生的。

除此之外,如果您愿意,您可以像下面这样应用自己的力量或冲动。这取决于你。

b2Vec2 force = b2Vec2(100, 200);
yourBody->ApplyLinearImpulse(force, yourBodyDefinition.position);

【讨论】:

  • 谢谢,我知道如何施力,但我应该怎么做才能让 box2d 计算碰撞后会发生什么?让,说我检测到碰撞,下一步是什么?联系听众自己做???你能给我举个例子吗?
  • 你什么都不用做。只需使用重力矢量创建一个世界。之后设置你的世界的边缘并创造你的身体。在你的“init”方法中安排一个“tick”方法被连续调用。在这个 'tick' 方法中,在你的世界上调用 'step' 方法并使用计算出的 box2d 物理引擎值更新你的精灵。
  • 不正确。我已经创建了一个世界,2 个精灵在其中移动,在我调用 step 的刻度方法中,当精灵 1 到达精灵 2 时,它只是与他重叠,它们继续移动,因为什么也没发生。我确实需要做点什么,除了检测到碰撞我只能找出什么???
  • Box2d 自动生成碰撞响应。所以在这种情况下,你的身体肯定不会发生碰撞。