2014-12-02 47 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