私がSpriteKitを使って開発しているゲームでは、特定のオブジェクトを表示したり縮小したりします。私はすでにスケールダウンする方法を知っており、次のコードを使用してこれを達成しています:SKNodeを指数関数的に小さくする
myNode.run(SKAction.scale(to: 0, duration: 3))
ただし、縮小は '線形に起こります'。指数関数的に速く縮小する方法はありますか?それとも、それはゆっくりと始まり、最後の2秒で2倍の速さで収縮しますか?
私がSpriteKitを使って開発しているゲームでは、特定のオブジェクトを表示したり縮小したりします。私はすでにスケールダウンする方法を知っており、次のコードを使用してこれを達成しています:SKNodeを指数関数的に小さくする
myNode.run(SKAction.scale(to: 0, duration: 3))
ただし、縮小は '線形に起こります'。指数関数的に速く縮小する方法はありますか?それとも、それはゆっくりと始まり、最後の2秒で2倍の速さで収縮しますか?
申し訳ありませんが、私はこれをテストできませんでした。私はコンパイラを持っていません。それはそれを正しく行うための最善の方法ではありませんが、私はそれに打撃を与えた:
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
}
}
編集:私は私のコードを見てみると、私はバグが表示されることがあります多分あなたがスケールから指数関数式を切り替える必要がありますそれを動作させるための期間が、私は今それをテストすることはできません:(
は、それは非常に便利なライブラリだとも運動のためのイージング関数を提供します。レイWenderlichからSprite Kit Utilsを見てください、スケール、およびアクションを回転させる。
(参考のため、easings.netに示されている様々なイージング機能をご覧ください)
希望に役立ちます!
イージングモードで試してください。しかし、私はそれがあなたに望ましい結果を与えるのではないかと疑います。しかし、サードパーティがあるので...あなたはそれらを試すことができます。またはカスタムアクションを試すことができます。 – Whirlwind
これはあなたが探しているものかもしれません。http://stackoverflow.com/questions/40043177/easeout-action-with-custom-skaction – 0x141E