虽然我搞乱了spritekit,但我注意到即使恢复设置为1.0(linearDamping和摩擦都为0),如果节点的速度很小,它不会反弹。例如。在下面的代码中,我在左侧创建了一个边,并且有一个球碰到边缘。我注意到在x方向上,每当速度大于150时,球就会弹跳;否则它只会粘在墙上并停止移动。 所以我想知道,有没有办法改变这个门槛,这样即使低速球也能反弹?谢谢!弹性碰撞的速度阈值
self.physicsWorld.gravity = CGVectorMake(0, 0);
SKNode *leftEdge = [[SKNode alloc] init];
leftEdge.physicsBody = [SKPhysicsBody bodyWithEdgeFromPoint:CGPointZero toPoint:CGPointMake(0.0, self.size.height)];
leftEdge.position = CGPointZero;
[self addChild:leftEdge];
SKShapeNode *ball = [SKShapeNode shapeNodeWithCircleOfRadius:30];
ball.position = CGPointMake(self.size.width * 0.3, self.size.height * 0.5);
ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:30];
ball.physicsBody.velocity = CGVectorMake(-150, 0.0);//not bounce
ball.physicsBody.restitution = 1.0;
ball.physicsBody.friction = 0.0;
ball.physicsBody.linearDamping = 0.0;
[self addChild:ball];
我认为你必须实现阈值速度的自定义实现,扩展你的SKShapeNode类添加他们的属性并创建你的自定义实现。 – Tirth 2015-01-21 06:49:34
最简单的解决方案可能是使用didBeginContact:方法为节点分配额外的速度,一旦触及墙壁。 – sangony 2015-01-21 16:53:35
[Swift中的SpriteKit物理可能重复 - 球滑过墙壁而不是反射](http://stackoverflow.com/questions/27671391/spritekit-physics-in-swift-ball-slides-against-wall-instead-of - 反射) – bummi 2016-02-03 06:41:47