雖然我搞亂了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