【问题标题】:Stop Deceleration in SKPhysicsBody Collisions在 SKPhysicsBody Collisions 中停止减速
【发布时间】:2014-05-05 00:50:41
【问题描述】:

在我的SpriteKit 项目中,我正在学习使用美妙的内置物理引擎。我通过使用附加到节点的SKPhysicsBody 实例来实现这一点,并且到目前为止效果很好。我当前的设置是当我添加一个节点时,我将其physicsBodyvelocity 向量设置为某个恒定速度。尽管手动将速度设置为某个固定值,但在节点碰撞几秒钟后,它们的速度会降低。我认为这是默认特性,因为它模拟了现实生活中的物理(通过多次碰撞造成的能量损失)。 我想停止这种行为。例如,我希望尽管有无数次碰撞,但所有能量都可以完美“保存”并且没有速度损失。以下是我尝试过的一些无济于事的事情。

  1. physicsBody.linearDamping = 0;
  2. physicsBody.friction = 0;

这甚至是physicsBody 属性,还是这种行为源于SKScenephysicsWorld 属性上的属性?

【问题讨论】:

  • 您无法像您描述的那样保持他们的势头。您可以做几件事来保持稳定的速度。你可以做很多事情。一种是你可以对你的物体施加不间断的速度并限制它的速度。
  • 您可以将所有physicsBodies的collisionBitMask设置为零。这将使他们继续前进,就好像他们没有与任何东西发生碰撞一样。但是,您应该设置contactTestBitMask,因为仍然会调用联系人代表。如果您确实希望物体发生碰撞,您可以在接触代表中设置它们的速度
  • @sangony 我找到了答案,如果你仍然感兴趣,我会发布。

标签: objective-c sprite-kit physics skphysicsbody skphysicsworld


【解决方案1】:

花了很多时间查看 Apple 文档后,我找到了答案。 SKPhysicsBody 上的 restitution 属性控制当该物体与其他物体碰撞时损失多少能量。该属性是一个在[0 ... 1] 范围内的浮点数,它与碰撞中损失的能量数量成反比(数字越大,损失的能量越少)。例如,该属性的默认值为.2,代表相当高的能量损失。为了解决我的问题,我在我的每个身体上将此属性设置为 1,这样当它们相互作用时,不会损失能量。

self.someNode.physicsBody.restitution = 1.0f;

结果:这100%解决了问题,经过几个小时的模拟,物理体完全没有能量损失。

【讨论】:

    【解决方案2】:

    还应考虑density(或mass)。 restitution 本身并不能解决某些身体配置上的速度松动问题。

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多