在我的SpriteKit
项目中,我正在学习使用精彩的内置物理引擎。我通过使用附加到节点的SKPhysicsBody
个实例来实现这一点,到目前为止它已经很好用了。我当前的设置是当我添加一个节点时,我将其physicsBody
的{{1}}向量设置为某个恒定速度。尽管手动将速度设置为某个固定值,但在几秒钟的节点碰撞后,它们的速度会降低。我认为这是默认特性,因为它模拟真实物理(通过多次碰撞损失能量)。 我想停止此行为。例如,我想,尽管发生了多次碰撞,但所有的能量都能完美地保存下来。没有速度损失。以下是我试图无济于事的一些事情。
velocity
physicsBody.linearDamping = 0;
这甚至是physicsBody.friction = 0;
属性,还是这种行为源于physicsBody
SKScene
属性的属性?
答案 0 :(得分:1)
经过大量时间审阅Apple文档后,我找到了答案。 restitution
上的SKPhysicsBody
属性控制当身体与其他人发生碰撞时损失的能量。此属性是一个范围为[0 ... 1]
的浮点数,它与碰撞中的能量损失量成反比关系(数字越大,能量损失越少)。例如,此属性的默认值为.2
,表示相当高的能量损失。为了解决我的问题,我在每个身体上将此属性设置为1
,这样当它们相互作用时,就不会消耗能量。
self.someNode.physicsBody.restitution = 1.0f;
结果:这样可以100%解决问题,经过几个小时的模拟后,物理机构完全没有能量消耗。
答案 1 :(得分:1)
还应考虑density
(或mass
)。仅restitution
并没有解决某些身体配置上的速度松动。