2015-01-21 87 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