2015-01-21 50 views
0

虽然我搞乱了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]; 
+0

我认为你必须实现阈值速度的自定义实现,扩展你的SKShapeNode类添加他们的属性并创建你的自定义实现。 – Tirth 2015-01-21 06:49:34

+0

最简单的解决方案可能是使用didBeginContact:方法为节点分配额外的速度,一旦触及墙壁。 – sangony 2015-01-21 16:53:35

+0

[Swift中的SpriteKit物理可能重复 - 球滑过墙壁而不是反射](http://stackoverflow.com/questions/27671391/spritekit-physics-in-swift-ball-slides-against-wall-instead-of - 反射) – bummi 2016-02-03 06:41:47

回答

0

当两个物体碰撞时,他们的复原和摩擦力(以及其他许多性能)都被考虑在内。因此,为了弹性碰撞,给墙恢复1和摩擦为0。

+1

试过但没有工作:( – 2015-01-23 05:11:53

+0

尝试关闭重力,看看是否导致它。 – Okapi 2015-01-23 07:14:18