2011-02-27 5 views
4

概要:2Dゲームのマルチプレイ/ネットワークオプション

私の50%が最終版にマルチプレイヤーをサポートしている必要があります物理エンジンとしてBOX2Dでの2D横スクロールゲームを終えました。しかし、現在のコードは単なるゲームです。

  • ここで何をすればよいですか?
  • さらに重要なのは、マルチプレイヤーを実装してシングルプレイヤーと組み合わせるべきですか?
  • マルチプレーヤモードから分離したシングルプレイヤーモードをコード化することは悪い考えですか(、NotchはMinecraftと同じです)?

    I:

シングルプレイヤーでパフォーマンスが

のフルバックグラウンド/質問(そこに問題になるのsingleplayerモードを実装するために、ループバック・サーバを使用して物理学をシミュレート)できるだけ良いことがありますC++の比較的大きな2Dゲームプロジェクトに取り組んでいます。物理を核としています。 (私はそのためにBox2Dを使用しています)

完成したゲームは完全なマルチプレイヤーをサポートしているはずですが、私はネットワーキングの部分を正しく計画しておらず、基本的にはシングルプレイヤーゲームで作業していました。

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

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

ここで私の半分は2Dのサイドチェロゲームで完成しました。

シングルプレイヤー/クライアントで作業を続けるだけで、今すぐ私には役に立たないように思えます。私は、後でコードを書き換え、リファクタリングする必要があります。

まず、おそらくこのような状況で自分自身を発見誰にも一般的な質問:

  • どのように進めるべき?
  • その後

、より具体的な1 - 私は私が私のゲームのためのネットワーキングの一部に近づくことができる方法を見つけるためにしようとしている:

  • のsingleplayer

このため目に見えない/ループバック・サーバ基本的にシングルプレイヤーモードとマルチプレイヤーモードの違いはないという利点があります。あまり追加のコードは必要ありません。

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

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

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

  • 分離のsingleplayer /マルチプレイモード

はのsingleplayerモードに関わる一切のサーバはないだろう。

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

ためのモジュールとして

  • マルチプレイモードこれは単に私が持っていた速いと考えられています。マルチプレイヤーは、追加のネットワーキングモジュールをロードしてサーバーに接続し、データを送受信し、シングルプレイヤーの世界を更新するシングルプレイヤーゲームで構成できます。

    回顧展では、以前にマルチプレーヤーモードを計画していなかったことを後悔します。私は本当にこの時点で立ち往生しています、そして、私は誰かが私を助けることができることを願っています!

+1

gamedev.SE http://gamedev.stackexchange.com/は面白いアイデアだ – CodesInChaos

答えて

1

ダムレンダリング端末アプローチを使用できます。利点は、最初からエンジンに組み込むことなく、統合するのが比較的簡単だということです。欠点は、予測技法を使用してレイテンシを補償しないことであり、可視オブジェクトが多数ある場合、帯域幅が高くなる可能性があるということです。

1つのアイデアは、ゲーム状態とその進化をグラフィックから分離することです。フレームごとに、ゲーム状態をグラフィック表現に変換します(オフスクリーンのものを取り除く)。その後、シングルプレイヤーで直接レンダリングし、マルチプレイヤーではそのグラフィック表現をネットワーク経由で送信します。また、入力をネットワーク経由でサーバーに送信しました。

どのくらいうまく動作するかは、描かれたオブジェクトの数とグラフィック記述の複雑さによって決まります。しかし、その記述は、通常、2Dゲームにとってはかなり小さい。

私はこれが良いレイテンシーと帯域幅を持っているので、LANでうまくいくと思います。それはインターネット上でどのようにうまく動作するかは考えられません。


ここには、Unrealネットワークコードの仕組みを説明するドキュメントがあります。また、の序文では、いくつかのより単純なアプローチについて説明しています。そのうちの1つを実装したいかもしれません。 http://unreal.epicgames.com/Network.htm

+0

がありますが、しかし、私はそれがあるとは思いません私のゲームには適しています。グラフィックスだけではなく、他にも同期が必要です。私はこれが複数のプレーヤーでどのように動作するかを本当に理解しているとは思えません – lamas

+0

グラフィック以外のところでユーザーに何を送る必要がありますか?また、複数のクライアントでは、それぞれのクライアントに独自のグラフィックスを送信します。 – CodesInChaos

2

ノッチは、SPとSMPを別々に開発することの苦痛を感じていると思います。特に、彼はBukkit開発チームに、「ソース・エンジンのように、あなたが言ったように、「シングル・プレーヤのローカル・サーバー」への移行を計画していたことを伝えていたからです)

複数の物理シミュレーションを行う必要はありませんローカルサーバとクライアント間のレイテンシはごくわずかですが、遅延補償は完全に無効にすることができます。

現時点では、次の2つの基本的なモデルがあります。 ゲームのすべての頭脳を行い、クライアントを接続できる専用サーバープログラム。 ゲームが基本的にサーバーまたはクライアントとして機能することができるリッスンサーバー。ユーザーの設定によって異なります。別のサーバープログラムはありません。

クライアントを作成する最も簡単な方法は、オブジェクトに「ダミー」フラグを追加して、それらのダミーをサーバーが直接制御できるようにすることです。次に、補間に移動します。 (60Hzでのオブジェクトの送信は現実的ではないので、点の間のスムージングは​​なんとなく素敵です。ソースは少し人工的な遅れを加えることでこれを行います。もしあなたがGTA4 Multiplayerをサブパインターネット接続でプレイしたなら、 。また、速い車に行き過ぎている)

、読み推奨: http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

+0

ありがとう、あなたは私に良いスタートを与え、いくつかをクリアしました:) – lamas

+0

"SMP"は、 "Survival Multiplayer"を指し、これはMinecraftに追加された "Survival"ゲームモードにちなんで命名されましたバニラのゲームで以前の創造的なモードに取って代わりました)。したがって、最初の文章は、シングルとマルチプレイヤーが現在Minecraftで個別に開発されているという事実を指しています。 –

関連する問題