2

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

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

这甚至是一个physicsBody属性,还是这种行为源于SKScene'属性上的一个physicsWorld属性?

4

2 回答 2

1

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

self.someNode.physicsBody.restitution = 1.0f;

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

于 2014-05-30T06:59:46.467 回答
1

也应该考虑density(或)。仅此一项并不能解决某些车身配置上的速度松动问题。massrestitution

于 2016-08-28T02:14:43.003 回答