我正在尝试使用 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/