我在How to rotate sprite in sprite kit with swift上试验了@ nickfalk关于如何在精灵工具包中旋转精灵的答案。
我如何调整此值以逐渐将旋转速度提高到最大值,然后当点击屏幕时,它逐渐减慢并反向旋转x个时间量?
谢谢!
托比。
答案 0 :(得分:2)
好的,以下(稍微凌乱的概念证明)以恒定速度旋转精灵。点击+保持后逐渐减慢旋转停止。结束触摸会立即将旋转返回到全速。
我已经设置了一个包含以下属性的场景:var sprite : SKSpriteNode?
和var shouldDecelerate = false
:
使用首选细节设置精灵,并使用repeactActionForever-action运行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))
}
}
}
如果你想逐渐提高速度,你基本上只需要一个与上面update()
所包含的逻辑相反的逻辑,哦,你也应该删除sprite?.speed = 1
行在touchesEnded()
。
如果您需要进行其他移动操作,其速度不受旋转速度的影响,我建议您将精灵挂钩到SKNode并让它处理其他操作。