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 并让它处理其他动作。