获取动画进度 - SpriteKit SKAction

Get progress of an animation - SpriteKit 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)
}

if 那么动画被下面的代码停止了

powerBar.paused = true

有没有办法知道动画在哪一刻停止,也许以整个动画的百分比形式?

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

这是我最终采用的方法,虽然丑陋,但有效

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

首先,我对 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属性。
它会 return 类似于 "<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”或在 [=14 时应用的任何纹理=] 是 运行.
因为图像的总数是已知的,所以知道纹理的当前名称将有助于获取动画播放的进度或百分比。