2014-12-02 44 views
0

我正在嘗試使用SpriteKit構建一個遊戲,其中有一個彈起來的球。現在我想讓玩家控制X軸上的球運動並讓物理引擎控制Y軸速度。強制執行單軸速度

例如,當球碰到一個角落時,它會開始橫向移動。我希望它能夠在角落裏反彈,然後迅速穩定下來並停止移動。有沒有這樣做,而不是試圖通過沖動來抵消橫向移動?只是手動控制球的上下運動會更容易嗎?

我試圖施加反作用力沒有多少成功(球怪胎):

override func update(currentTime: NSTimeInterval) { 
    let ballDx = ball?.physicsBody?.velocity.dx 
    if let ballVelocityX = ballDx { 
     if ballVelocityX != 0 { 
     ball?.physicsBody?.applyForce(CGVectorMake(ballVelocityX * -1, 0)) 
     } 
    } 
    } 

回答

1

聽起來像是你需要應用線性在x方向阻尼。這裏有一個如何做到這一點的例子:

// Adjust this value as needed. It should be in [0,1], where a value of 1 will 
// have no effect on the ball and a value of 0 will stop the ball immediately. 
let xAlpha:CGFloat = 0.95 

override func update(currentTime: CFTimeInterval) { 
    /* Apply damping only in x */ 
    let dx = sprite.physicsBody!.velocity.dx * xAlpha 
    let dy = sprite.physicsBody!.velocity.dy 
    sprite.physicsBody?.velocity = CGVectorMake(dx, dy)   
} 
+0

這正是我所需要的! – simme 2014-12-03 08:02:29