获取动画的进度 - SpriteKit SKAction

时间:2016-02-19 12:44:00

标签: swift skaction

以下代码运行一系列图像。

let powerBar:SKSpriteNode = SKSpriteNode()

func animate(){
    var textures:[SKTexture] = []
    for i in 1...30 {
        textures.append(SKTexture(imageNamed: "power\(String(format: "%04d", i))"))
    }
    let animation = SKAction.animateWithTextures(textures, timePerFrame: 0.03)
    powerBar.runAction(animation)
}

如果那时动画被以下代码停止

powerBar.paused = true

有没有办法知道动画停止的时刻,可能是整个动画的百分比形式?

背景:我正在开发一款简单的游戏。用户可以通过点击开始设置点火功率并点击停止移动电源条。这就是为什么我需要知道动画的进展。想法,想法?

1 个答案:

答案 0 :(得分:0)

这是我最终做的方法,它很难看,但它有效

假设:动画的图像总数已知

首先,我对NSString进行了扩展

extension NSString{
    func stringWithinCharPairs(str:String, char:String) -> String{
        let range = str.rangeOfString(char)!
        let str2 = str.substringFromIndex(range.endIndex)
        let range2 = str2.rangeOfString("'")
        return str2.substringToIndex(range2!.startIndex)
    }
}

这里我使用powerBar.texture!.description属性。
它会返回类似"<SKTexture> 'power0008' (120 x 120)"

的内容
var str:NSString = NSString(string: powerBar.texture!.description)
str = str.stringWithinCharPairs(str as String, char: "'")

此处 str 会为您提供给定SKSpriteNode纹理的 imageNamed

根据问题, str 可以是“ power0008 ”或运行powerBar.paused = true时正在应用的任何纹理。
因为已知图像的总数,所以知道纹理的当前名称将有助于获得动画的进度或百分比。