SpriteKit节点坚持场景/不弹跳的边缘

时间:2014-07-01 00:27:39

标签: ios xcode sprite-kit

我已经搜索了这个,我认为必须有一些参数来解决这个问题,但我还没有找到它。

我在SpriteKit中有一个场景,我想要一些圆/球反弹并保持它们无限期的任何速度。它们应该从场景的边缘反弹。

如果它们移动速度足够快,或以相当尖锐的角度击中,这是有效的,但是如果它们变慢并且接近边缘平面,它们会继续移动(这很好)但是它们&# 34;棒"到了边缘。这种坚持是我不想要的。即使走得很慢,它们也应该反弹。

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

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;

我的场景中的引力为零。我向节点添加了一个冲动,它们开始弹跳 - 它似乎非常接近,因为事物反弹,但是如果有任何缓慢移动并以较小的角度进入,它们会拥抱"边缘。我将尝试在下面插图以帮助可视化。

http://i.imgur.com/Rpr7luY.png

我尝试过使用大量的PhysicsBody设置,但是不能停止粘贴。

谢谢!

3 个答案:

答案 0 :(得分:3)

正如小伙子们提到的那样,this answer可以直观地看作是朝着正确方向迈出的一步,但问题在于整个SpriteKit物理引擎。它是非确定性的,并且在计算中会丢失分数,导致模拟不精确。

简短的回答是改用Box2D。黑客的回答是在相反的方向上施加冲动。

All details are highlighted in my other answer

@Jurik很高兴我可以帮忙:)。

答案 1 :(得分:0)

错误的初始化程序。有两种SKPhysicsBody - 基于卷基于边缘的。您正在使用完全错误的类型,而不是参与者的移动。

请查看SKPhysicsBody Documentation.

答案 2 :(得分:0)

问题是多种多样的,并且与物理引擎本身的缺点有关,但是,我设法提出了一种解决方案,不需要任何第三方软件,并且可以产生一致的结果。

在此处查看我的解决方案:Accounting for Low Impact Angles/Velocities that Don't Register as Collisions