これは古い投稿ですが、まだポップアップしているので、ここに2セントを追加したいと思いました。
UI /表示スレッドとロジックスレッドに保存される最初のデータをリストします。UIスレッドには、3Dメッシュ、テクスチャ、ライト情報、および位置/回転/方向データのコピーを含めることができます。
ゲームロジックスレッドでは、3dのゲームオブジェクトサイズ、境界プリミティブ(球、立方体)、単純化された3dメッシュデータ(詳細な衝突など)、オブジェクトの速度、回転比などの動き/動作に影響するすべての属性が必要になる場合があります。また、位置/回転/方向データ。
2つのリストを比較すると、ロジックからUIスレッドに渡す必要があるのは、位置/回転/方向データのコピーのみであることがわかります。また、このデータがどのゲームオブジェクトに属するかを判断するために、何らかの種類の相関IDが必要になる場合があります。
その方法は、使用している言語によって異なります。Scalaでは、ソフトウェアトランザクションメモリ、Java / C ++では何らかのロック/同期を使用できます。不変データが好きなので、更新ごとに新しい不変オブジェクトを返す傾向があります。これは少しメモリを浪費しますが、現代のコンピュータではそれほど大したことではありません。それでも、共有データ構造をロックする場合は、実行できます。JavaのExchangerクラスを確認してください。2つ以上のバッファーを使用すると、速度が向上します。
スレッド間でデータを共有する前に、実際に渡す必要があるデータの量を計算します。3Dスペースを分割するoctreeがあり、ロジックが10個すべてを更新する必要がある場合でも、表示している5個だけを再描画する必要がある場合でも、合計10個のオブジェクトのうち5個のゲームオブジェクトを見ることができます。詳細については、このブログをご覧ください:http :
//gameprogrammingpatterns.com/game-loop.html
これは同期に関するものではありませんが、ゲームロジックが表示からどのように分離されるか、どのような課題を克服する必要があるか(FPS)を示しています。お役に立てれば、
マーク