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