以下代码运行一系列图像。
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
有没有办法知道动画停止的时刻,可能是整个动画的百分比形式?
背景:我正在开发一款简单的游戏。用户可以通过点击开始设置点火功率并点击停止移动电源条。这就是为什么我需要知道动画的进展。想法,想法?
答案 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
时正在应用的任何纹理。
因为已知图像的总数,所以知道纹理的当前名称将有助于获得动画的进度或百分比。