在SKPhysicsBody碰撞中停止减速

时间:2014-05-05 00:50:41

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

在我的SpriteKit项目中,我正在学习使用精彩的内置物理引擎。我通过使用附加到节点的SKPhysicsBody个实例来实现这一点,到目前为止它已经很好用了。我当前的设置是当我添加一个节点时,我将其physicsBody的{​​{1}}向量设置为某个恒定速度。尽管手动将速度设置为某个固定值,但在几秒钟的节点碰撞后,它们的速度会降低。我认为这是默认特性,因为它模拟真实物理(通过多次碰撞损失能量)。 我想停止此行为。例如,我想,尽管发生了多次碰撞,但所有的能量都能完美地保存下来。没有速度损失。以下是我试图无济于事的一些事情。

  1. velocity
  2. physicsBody.linearDamping = 0;
  3. 这甚至是physicsBody.friction = 0;属性,还是这种行为源于physicsBody SKScene属性的属性?

2 个答案:

答案 0 :(得分:1)

经过大量时间审阅Apple文档后,我找到了答案。 restitution上的SKPhysicsBody属性控制当身体与其他人发生碰撞时损失的能量。此属性是一个范围为[0 ... 1]的浮点数,它与碰撞中的能量损失量成反比关系(数字越大,能量损失越少)。例如,此属性的默认值为.2,表示相当高的能量损失。为了解决我的问题,我在每个身体上将此属性设置为1,这样当它们相互作用时,就不会消耗能量。

self.someNode.physicsBody.restitution = 1.0f;

结果:这样可以100%解决问题,经过几个小时的模拟后,物理机构完全没有能量消耗。

答案 1 :(得分:1)

还应考虑density(或mass)。仅restitution并没有解决某些身体配置上的速度松动。