概要:
物理エンジンとして Box2D を使用した 50% 完成した 2D サイドスクローラーは、最終バージョンでマルチプレイヤーをサポートする必要があります。ただし、現在のコードは 1 人用のゲームです。
- 私は今どうすればいい?
- さらに重要なことに、マルチプレイヤーを実装してシングルプレイヤーと組み合わせるにはどうすればよいですか?
- シングルプレイヤー モードをマルチプレイヤー モードから分離してコーディングするのは悪い考えですか ( Notch が Minecraft で行ったように)?
シングルプレイヤーでのパフォーマンスは可能な限り優れている必要があります (シングルプレイヤー モードを実装するためにループバック サーバーを使用して物理学をシミュレートすると、問題が発生する可能性があります)。
完全な背景 / 質問:
私は C++ で比較的大規模な 2D ゲーム プロジェクトに取り組んでおり、その中核要素として物理学を使用しています。(そのためにBox2Dを使用します)
完成したゲームはマルチプレイヤーを完全にサポートするはずですが、ネットワーク部分を適切に計画していなかったというミスを犯し、基本的に今までシングルプレイヤー ゲームに取り組んでいました。
マルチプレイヤー サポートは、ほぼ完成したシングルプレイヤー ゲームに比較的簡単かつ明確な方法で追加できると考えていましたが、明らかに、私が読んだ限りではこれは間違っています。
マルチプレイヤー ゲームは最初から 1 つとしてプログラムする必要があることも読みました。シングルプレイヤー モードは、実際には目に見えないローカル サーバーをホストし、ループバック経由で接続するだけで構成されています。(私は、ほとんどの FPS ゲーム エンジンがそのようにしていることを知りました。例は Source です)
これで、2D 横スクロール ゲームを半分完成させましたが、どうすればよいかわかりません。
シングルプレイヤー/クライアントで作業を続けるだけでは、後でさらに再コーディングしてリファクタリングする必要があるため、今では役に立たないように思えます。
まず、このような状況に陥った可能性のある方への一般的な質問:
- どのように進めればよいですか?
次に、より具体的なものです。ゲームのネットワーク部分にどのようにアプローチできるかを見つけようとしています。
- シングルプレイヤー用の見えない / ループバック サーバー
これには、基本的にシングルプレイヤー モードとマルチプレイヤー モードの間に違いがないという利点があります。追加のコードはほとんど必要ありません。
大きな欠点: シングルプレイヤーでのパフォーマンスとその他の制限。2 つの物理シミュレーションが実行されます。1 つはクライアント用、もう 1 つはループバック サーバー用です。
たとえば、スレッドによる直接通信を通じて、ループバック サーバーからのデータに直接パスを提供することで回避したとしても、シングル プレイヤーは制限されます。
これは問題です。なぜなら、人々は一度に大量のオブジェクトをいじることを許可されるべきだからです。
- 分離されたシングルプレイヤー/マルチプレイヤーモード
シングルプレイヤー モードに関与するサーバーはありません。
これがどのように機能するかはよくわかりません。しかし、シングルプレイヤー機能のすべてを再実装するか、マルチプレイヤーモードに接着する必要があるため、少なくとも多くの追加作業が必要になると思います.
- シングルプレイヤー用のモジュールとしてのマルチプレイヤーモード
これは私が簡単に考えたにすぎません。マルチプレイヤーは、追加のネットワーク モジュールをロードしてサーバーに接続したシングルプレイヤー ゲームで構成できます。このモジュールは、データを送受信し、シングルプレイヤーの世界を更新します。
振り返ってみると、マルチプレイヤー モードを以前に計画しなかったことを後悔しています。私はこの時点で本当に立ち往生しています。誰かが私を助けてくれることを願っています!