【发布时间】:2014-08-21 10:59:08
【问题描述】:
我已经搜索过这个,我认为必须有一些参数来解决这个问题,但我没有找到它。
我在 SpriteKit 中有一个场景,我希望一些圆圈/球在其中反弹并无限期地保持它们的任何速度。它们应该从场景的边缘反弹。
如果他们移动得足够快,或者以相当尖锐的角度击球,这是有效的,但如果他们跑得慢并且靠近边缘平面,他们会继续移动(这很好)但他们“坚持“到边缘。这种粘连是我不想要的。即使速度很慢,它们也应该会反弹。
为了设置边缘,我使用了:
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 设置,但无法停止粘连。
谢谢!
【问题讨论】:
-
物理模拟不准确的可能副作用。尝试关闭 allowRotation。如果这没有帮助,您可能不得不忍受这种行为。
-
将摩擦力设置为零摩擦力,防止它们在边缘弹跳,或者您可以在 didBeginContact 函数上获得 contact.collisionImpulse 并在每次边缘碰撞时施加很小的力或脉冲
-
是的,没错。当赏金用完时,我会将其标记为重复。该死的 - 这真的是一个错误。
-
@Jurik 是的,这令人沮丧,我希望苹果能解决这个问题。
标签: ios xcode sprite-kit