Swift SpriteKit - 逐渐增加旋转

时间:2015-05-23 09:05:05

标签: ios swift sprite-kit

我在How to rotate sprite in sprite kit with swift上试验了@ nickfalk关于如何在精灵工具包中旋转精灵的答案。

我如何调整此值以逐渐将旋转速度提高到最大值,然后当点击屏幕时,它逐渐减慢并反向旋转x个时间量?

谢谢!

托比。

1 个答案:

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