2017-07-20 7 views
2

私はこれら2つの機能の違いを知りません。これら2つのSpriteKit関数の違いは何ですか?

まず:

coin.run(SKAction.moveTo(y: -146.115, duration: 0)) 

二:それは指定された時間間隔でノ​​ードの位置を変化させるアニメーションバージョンであるため

coin.position.y = -146.115 
+0

SKActionのドキュメントはhttps://developer.apple.com/documentation/spritekit/skaction/1417768-movetoでご覧ください。要するに、SKActionは指定された期間にわたってスプライトオブジェクトを新しい位置にアニメートします。 – firstinq

答えて

2

SKAction.moveTo()があるdurationパラメータを有しています。一方、ノードの位置を変更しても、その動きはアニメートされません。

+0

ちょっとそこには、実際にパラメータとアニメーションだけではありません。あなたが好きなら私の答えをチェックしてください:) – Fluidity

0

最初の行では、コインクラスオブジェクトを使用しており、そのオブジェクトを実行するアクセス機能が使用されています。第二行コインクラスオブジェクトで

coin.run(SKAction.moveTo(y: -146.115, duration: 0)) 

は、プロパティposition.yだアクセスし、値をフロート割り当てます。

coin.position.y = -146.115 

希望があります!

+0

ねえ、SOに貢献してくれてありがとう。違いの詳細な説明については私の答えを見てください:) – Fluidity

4

SKActionは、updateの直後の次のフレームまで処理されません。 didEvaluateActionsの後に.runと電話すると、あなたの位置は更新されず、そのためにバグが発生する可能性があります。

コードの2番目の行は、SKループ内のあなたの位置に関係なく直ちに行われます。

例物理学を使用していて、didBegin(contactの何かに.run(.move(を呼び出して、そのスプライトがすでにdidEnd(contact)に移動していることが予想される場合は、問題が発生します。このような状況では、アクションを使用する代わりに手動で.positionを調整する必要があります。

enter image description here

それだけ手動で位置を調整するよりも、どこかの間に20〜30%遅いSKActionオブジェクトの初期化を必要とするため、第二に、.runコマンドは、また、より少ないパフォーマンスです。

与えられた違いの量はあまり加算されませんが、複雑なシーンではすべてが16ms(60fps)で完了するかどうかの違いになる可能性があります。

第3に、他の人が触れたように、forDurationパラメータがあります。このパラメータを使用すると、一定の時間、たとえば2秒間の動きをアニメートできます。

関連する問題