在我用SpriteKit开发的游戏中,我希望某些对象出现并缩小。我已经知道如何缩小它们,并且我使用以下代码实现了这一点:
myNode.run(SKAction.scale(to: 0, duration: 3))
然而,萎缩是线性地发生的。有没有办法让它以指数级的速度缩小?或者至少它开始缓慢,在最后一秒它的收缩速度是原来的两倍?
答案 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)
上展示的不同宽松功能希望有所帮助!