指数缩小SKNode

时间:2017-04-10 18:19:21

标签: ios swift animation sprite-kit scale

在我用SpriteKit开发的游戏中,我希望某些对象出现并缩小。我已经知道如何缩小它们,并且我使用以下代码实现了这一点:

myNode.run(SKAction.scale(to: 0, duration: 3))

然而,萎缩是线性地发生的。有没有办法让它以指数级的速度缩小?或者至少它开始缓慢,在最后一秒它的收缩速度是原来的两倍?

2 个答案:

答案 0 :(得分:0)

抱歉,我无法测试,我没有编译器。这不是最好的方法,但我试了一下:

 func delay(_ delay:Double, closure:@escaping ()->()) {
        let when = DispatchTime.now() + delay
        DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
    }

let totalRunTime = 1
var add = 0.0
var scale = 1
var done = false
while !done{
 delay(add, closure: {
add += 0.1
scale = 1 - (add ^2)
myNode.run(SKAction.scale(to: scale, duration: totalRunTime / 10))
})
if add == 0{
done = true
}
}

编辑:当我查看我的代码时,我可能会看到一个错误:也许您需要将指数公式从刻度切换到持续时间以使其工作,我现在无法测试它:(

答案 1 :(得分:0)

看看Ray Wenderlich的Sprite Kit Utils。它是一个非常有用的库,还提供了移动,缩放和旋转动作的缓动功能。

(作为参考,请看easings.net

上展示的不同宽松功能

希望有所帮助!