物理演算を備えた2Dゲームのマルチプレイヤー/ネットワーキングオプション[終了]


7

概要:

物理エンジンが最終バージョンでマルチプレーヤーサポートを備えているため、私の50%はBox2Dを備えた2Dサイドスクローラーを完成させました。ただし、現在のコードはシングルプレイヤーゲームです。

  • 私は今どうすればいい?
  • さらに重要なのは、マルチプレーヤーを実装してシングルプレーヤーと組み合わせる方法を教えてください。
  • シングルプレイヤーモードをマルチプレイヤーモードから分離してコーディングするのは悪い考えですか(NotchがMinecraftで行ったように)。

シングルプレイヤーでのパフォーマンスは可能な限り優れている必要があります(ループバックサーバーを使用してシングルプレイヤーモードを実装することで物理をシミュレートすることが問題になります)

完全な背景/質問:

私はC ++で比較的大規模な2Dゲームプロジェクトに取り組んでおり、その中核要素として物理学を使用しています。(私はそのためにBox2Dを使用しています)

完成したゲームはマルチプレイヤーを完全にサポートしているはずですが、ネットワークの部分を適切に計画しておらず、今までは基本的にシングルプレイヤーゲームに取り組みました。

マルチプレーヤーのサポートは、ほぼ完成したシングルプレーヤーゲームに比較的簡単で明確な方法で追加できると思いましたが、私が読んだことから、これは間違いです。

マルチプレイヤーゲームは最初から1つとしてプログラムする必要があると私は読みました。シングルプレイヤーモードは、実際には目に見えないローカルサーバーをホストし、ループバック経由で接続するだけで構成されています。(ほとんどのFPSゲームエンジンがそのように実行することがわかりました。例はソースです)

だから、私は半分完成した2Dサイドスクローラーゲームで、私はどうすればよいのか本当にわかりません。

シングルプレイヤー/クライアントで作業を続けるだけでは今は役に立たないように見えます。後でコードを変更してリファクタリングする必要があるからです。

まず、このような状況に陥った可能性のある人への一般的な質問:

  • どうすればいいですか?

次に、より具体的なもの-私は自分のゲームのネットワーキング部分にどのようにアプローチできるかを見つけようとしています:

(可能な解決策:)

  • シングルプレイヤー用の非表示/ループバックサーバー

これには、基本的にシングルプレイヤーモードとマルチプレイヤーモードに違いがないという利点があります。追加のコードはそれほど必要ありません。

大きな欠点:シングルプレイヤーのパフォーマンスとその他の制限。2つの物理シミュレーションが実行されます。1つはクライアント用、もう1つはループバックサーバー用です。

ループバックサーバーからのデータへの直接パスを提供することで回避した場合でも、たとえばスレッドによる直接通信を通じて、シングルプレイヤーは制限されます。

これは、人々が大量のオブジェクトを一度にいじることを許可されるべきであるため、問題です。

  • シングルプレイヤー/マルチプレイヤーモードの分離

シングルプレイヤーモードに関与するサーバーはありません。

これがどのように機能するかは本当にわかりません。しかし、少なくとも、シングルプレイヤーのすべての機能を再実装するか、マルチプレイヤーモードに接着する必要があるため、多くの追加作業が必要になると思います。

  • シングルプレイヤー用のモジュールとしてのマルチプレイヤーモード

これは、私がすぐに思いついた考えです。マルチプレイヤーはシングルプレイヤーゲームで構成され、追加のネットワークモジュールが読み込まれ、サーバーに接続されて、データを送受信し、シングルプレイヤーの世界を更新します。

振り返ってみると、以前にマルチプレイヤーモードを計画していなかったことを後悔しています。私はこの時点で本当に行き詰まっています。誰かが助けてくれることを願っています!


少し話題から外れているかもしれませんが、もうご存知でしょうが、ゲーム 50%完成していない可能性があります。
cubuspl42

回答:


4

レイテンシ防止のネットワーク化された物理学の例(ソース付き)がここにあります:http : //gafferongames.com/2010/03/11/gdc-2010-networked-physics-slides-demo/

ただし、最初に、マルチプレイヤーモードのゲームプレイに焦点を当てます。それが競争力があり、(リバースエンジニアリングまたはパケット改ざんによる)不正が問題である場合、提案されたソリューションはニーズに合わない可能性があります。

あなたのマルチプレイヤーモードが協力的であるとしましょう。シングルプレイヤーモード用。私は同じゲームエンジンを実行するだけですが、ネットワーク機能が無効になっているため、世界には他のプレイヤーキャラクターが入りません。また、コンテンツをプレーヤーの数に調整するために、マルチプレーヤーモードの特定のデータをロードすることもできます。



1

ローカルループバックサーバーの利点は、欠点をはるかに上回っていると思います。私の意見では、コード削減の量は非常に貴重です。

冗長な物理シミュレーションの実行に関しては、サーバーのティックを確認する必要があります。Valveは、ここですばらしい記事を書いています。ローカルサーバー環境では、ローカルのみの状況で、「クライアントシミュレーション」を削除して、全世界の更新を送信するだけで、十分な帯域幅を確保できるため、冗長な物理シミュレーションを回避できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.