ios - 强制单轴速度

标签 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))
      }
    }
  }

最佳答案

听起来您需要在 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)        
}

关于ios - 强制单轴速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256216/

相关文章:

python - Mac OS X 上用于 Python 3 的 Kivy

ios - 我如何知道哪个 Sprite 被触摸了?

objective-c - 列出调度队列中的项目

macos - 检测WebView加载完成

ios - 仅在某些单元格上允许滑动

linux - 将网页保存到本地框

ios - 如何使用图像纹理设置 SKSpriteNode 的颜色?

sprite-kit - GKGraph GKGraphNode GKGridGraphNode,它们之间有什么关系?

ios - UITableView 优于 UITableViewCell didSelectMethod

ios - 用什么方法将 NSString 价格乘以数量? ios