2015-11-19 7 views
5

SpriteKitのプログラミングガイドでは、独自のゲームロジックを実装するための最良の場所としてupdate()関数が参照されています。 しかし、ノード上のカメラのセンタリングが、didFinishUpdate()(レイテンシを避けて)でよりうまく動作することを認識したので、私はそのオプションを使用していました。didFinishUpdateではなく、ゲームロジックでupdate()が優先されるのはなぜですか?

camera.position.y = node.position.y 

他のレイテンシーの問題を怖がっています。他のゲームロジックを実装しました。できます。 したがって、何故彼らはupdate()をお勧めしますか? 両方の方法を使用することによるパフォーマンス上の利点はありますか?

ありがとうございます。

答えて

5

パフォーマンス上の利点はありません。ゲームロジックの前提条件を決定するのは本当に問題です。物理学と行動が計算されたWERE(didUpdate)または(更新)と計算されているという前提でロジックを実行しますか?たとえば、物理とアクションが処理される前にupdateが呼び出されます。したがって、カスタム物理計算のようなロジックがある場合、物理学のボディをブロックするために壁を作成する場合や、すぐに実行したいアクションを単に実行する場合であっても、更新メソッドで実行する必要があります。現在のフレームで計算されます。しかし、カメラのノードをセンタリングすることは、物理学が計算された後にカメラを中央に配置したいので、didUpdateでうまくいくでしょう。

updateメソッドは現在のゲーム時間を渡すので、updateメソッドを使用してフレーム間の時間(AKAデルタタイム)を計算する必要があることにも注意してください。これは、N秒後にロジックを実行するか、または可変のタイムステップを使用してカスタムフィジックスを処理するためにカウントするようなことを行うのに必要なことがよくあります。これにより、現在の差分時間を変数に保存して、didUpdateメソッドや他のコールバックからアクセスできるようにするため、更新メソッドに制限されません。

個人的な経験から、自分が行った変更が現在のフレームですべて処理されることを前提とした多くのカスタム物理とロジックを持つことが多いため、didUpdateよりも更新メソッドを使用しています。しかし、私が上記のようにあなたの前提条件が何であるかによって異なります。場合によっては、ロジックがレンダリングサイクルと独立している可能性があるため、選択した内容は問題になりません。

私はSprite Kit Documentationのこのイメージが、レンディングサイクルを視覚化するのをはるかに容易にしていると思います。ゲームロジックを分析し、ゲームロジックが意味を成すサイクルのどの時点で判断するか。 ​​

関連する問題