C# で 2D 空間 RTS ゲームを作成しています。シングルプレイヤーが動作します。次に、マルチプレイヤー機能を追加したいと思います。私はそれをグーグルで検索しましたが、強力なネット接続なしで何千ものユニットを継続的に移動させる唯一の方法があるようです: すべてのプレイヤーで同じシミュレーションを実行しながら、ネットワークを介してコマンドのみを送信します.
そして今、エンジン全体がどこでも double を使用するという問題があります。また、浮動小数点計算はコンパイラの最適化と CPU アーキテクチャに大きく依存するため、同期を維持することは非常に困難です。そして、それはまったくグリッドベースではなく、宇宙船を動かすための単純な物理エンジンを備えています(宇宙船には衝動と角運動量があります...)。そのため、固定小数点を使用するように全体を再コーディングするのは非常に面倒です (ただし、おそらく唯一の解決策です)。
したがって、これまでのところ2つのオプションがあります。
- 現在のコードに別れを告げ、整数を使用して最初からやり直す
- 数千のユニットを持つ 8 人のプレーヤーを持つのに十分な帯域幅がある場合にのみゲーム LAN を作成し、(ほぼ) すべてのフレームで位置や方向などを送信します...
だから私はより良い意見を探しています(または、すべてを台無しにすることなくコードを固定小数点に移行するためのヒントさえも...)