モデルビューコントローラーパターンのモデルを使用して、マルチプレイヤーゲームとゲームロジックから記録されたリプレイでのゲーム同期の問題を回避するためのヒントを人々が持っていることを考えているだけです
これまでのところ、モデルの外側のどこにでも const 以外のアクセスを与えるのは良い考えではないことを認識していますが、それを除けば、少し行き詰まり、まだ多くの同期の問題があります
ありがとう
モデルビューコントローラーパターンのモデルを使用して、マルチプレイヤーゲームとゲームロジックから記録されたリプレイでのゲーム同期の問題を回避するためのヒントを人々が持っていることを考えているだけです
これまでのところ、モデルの外側のどこにでも const 以外のアクセスを与えるのは良い考えではないことを認識していますが、それを除けば、少し行き詰まり、まだ多くの同期の問題があります
ありがとう
分散同期を実現するには、理想的には別のゲーム サーバー上に、指定された単一のマスター モデルが必要です。制御イベントはそこに行き、タイムスタンプを取得し、進行中のすべての相互作用が計算され、タイムスタンプ付きの更新イベントが送信されます。リプレイは、更新イベントを保存して再生するだけで実行できます。
モデルは別のサーバーで実行されているため、ビューに const (同期) アクセスを与えることさえできません。汎用 MVC は実際には正しいアプローチではありません。
model -> event stream -> local model -> view
^ |
| v
selector <- action stream <- controller
2 つのストリームは間違いなく非同期であり、おそらく UDP であるため、損失が大きくなります。
マルチスレッド化は避けてください。もしあれば、上記のコンポーネントの 1 つに完全にローカライズする必要があります (たとえば、セレクター内のスレッド プーリング、モデル内のゾーンごとに 1 つのスレッド)。
多くのゲームでは、パフォーマンス上の理由から、そのモデルを壊して、コントローラにローカル モデルの一部を直接更新させる必要があります (たとえば、インターネット接続を抜いた状態で Wow を歩き回ることができる方法など)。これは間違いなく同期の問題につながりますが、ping 時間 > 人間の反応時間のネットワーク上のリアルタイム ゲームでは、おそらく回避できません。
同期とは、マルチスレッド同期を意味しますか?その場合は、ミューテックスを使用します。通信の同期を意味する場合、何が起こっているのかもう少し説明できますか?