强制单轴速度

时间:2014-12-02 18:15:32

标签: ios macos sprite-kit

我正在尝试使用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 个答案:

答案 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)        
}