Swift SpriteKit - 逐渐增加旋转
Swift SpriteKit - Gradually increase rotation
我正在试验@nickfalk 在 How to rotate sprite in sprite kit with swift 上关于如何在 sprite 工具包中旋转 sprite 的回答。
我该如何调整它以逐渐将旋转速度提高到最大,然后在单击屏幕时逐渐减慢并向相反方向旋转 x 时间?
谢谢!
托比。
好的,以下(概念证明有点乱)以恒定速度旋转精灵。点击+按住它会逐渐减慢旋转速度直至停止。立即结束触摸 returns 旋转到全速。
我设置了一个具有以下属性的场景:var sprite : SKSpriteNode?
和 var shouldDecelerate = false
:
精灵设置了首选细节,并有一个 repeactActionForever 动作 运行 360 度旋转。从这里开始,它相当简单:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
shouldDecelerate = true
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
shouldDecelerate = false
sprite?.speed = 1
sprite!.runAction(SKAction.speedTo(sprite!.speed, duration: 1/60))
}
override func update(currentTime: CFTimeInterval) {
if let sprite = sprite {
if sprite.speed > 0 && shouldDecelerate {
let newSpeed = max(sprite.speed - 0.1, 0) // we don't want a negative speed as it will reverse the rotation
sprite.runAction(SKAction.speedTo(newSpeed, duration: 1/60))
}
}
}
如果你想逐渐提高速度,你基本上只需要一个 if 逻辑与我在上面 update()
中包含的逻辑相反,哦,你还应该删除 sprite?.speed = 1
行在 touchesEnded()
.
如果您需要其他速度不受旋转速度影响的移动动作,我建议您将精灵连接到 SKNode 并让它处理其他动作。
我正在试验@nickfalk 在 How to rotate sprite in sprite kit with swift 上关于如何在 sprite 工具包中旋转 sprite 的回答。
我该如何调整它以逐渐将旋转速度提高到最大,然后在单击屏幕时逐渐减慢并向相反方向旋转 x 时间?
谢谢!
托比。
好的,以下(概念证明有点乱)以恒定速度旋转精灵。点击+按住它会逐渐减慢旋转速度直至停止。立即结束触摸 returns 旋转到全速。
我设置了一个具有以下属性的场景:var sprite : SKSpriteNode?
和 var shouldDecelerate = false
:
精灵设置了首选细节,并有一个 repeactActionForever 动作 运行 360 度旋转。从这里开始,它相当简单:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
shouldDecelerate = true
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
shouldDecelerate = false
sprite?.speed = 1
sprite!.runAction(SKAction.speedTo(sprite!.speed, duration: 1/60))
}
override func update(currentTime: CFTimeInterval) {
if let sprite = sprite {
if sprite.speed > 0 && shouldDecelerate {
let newSpeed = max(sprite.speed - 0.1, 0) // we don't want a negative speed as it will reverse the rotation
sprite.runAction(SKAction.speedTo(newSpeed, duration: 1/60))
}
}
}
如果你想逐渐提高速度,你基本上只需要一个 if 逻辑与我在上面 update()
中包含的逻辑相反,哦,你还应该删除 sprite?.speed = 1
行在 touchesEnded()
.
如果您需要其他速度不受旋转速度影响的移动动作,我建议您将精灵连接到 SKNode 并让它处理其他动作。