3

私は現在、C ++ / SDL/OpenGLゲームに取り組んでいます。私はすでにいくつかの小さなゲームを作りましたが、ローカルのものだけです(ネットコードはありません)。だから私はエンジンの作り方を知っていますが、ネットコードについてはよくわかりません。最初に分割画面再生用の完全なエンジンを作成し、後でネットコードを追加できますか、それともすべてが複雑になりますか?基本的なゲームエンジンをプログラミングするときに、ネットコードをすでに考慮する必要がありますか、それとも1台のマシンで正常に実行された後、ネットコードをゲームの上に置くだけでも大丈夫ですか?

それが重要な場合、それは2Dシューティングタイプのゲームです。いいえ、プログラミング言語/ウィンドウマネージャー/ APIの選択を変更するのは好きではありません。これは、ゲームの基本をすでに実装しているためです。私はこの問題にどのようにアプローチするのが最善かを知りたがっています。

4

3 に答える 3

2

理論的には、必要なのは十分に優れた設計だけです。十分な抽象クラスとBAMを書いてください!1つのユーザーインターフェイス(つまり、ローカルのみ)を別のユーザーインターフェイス(ネットワーク)にポップアウトできます。しかし、私はその理論を信じません。

やりたいことをすることは可能ですが、ネットワーク化されたゲームプレイを扱うときに取り組む新しい問題のすべてを考慮する必要があります-複数のユーザーのビューの同期、1人のユーザーがネットワークリンクをドロップしたときの対処方法(1人のユーザーがいつ検出するか)もちろん、ネットワークリンクをドロップします)、ユーザー入力を受信する際のネットワーク遅延、一方の側ではラグを処理し、もう一方の側では処理しません。ネットワークプログラミングは完全に異なり、いくつかの側面(主に同期を扱う側面)はコアエンジン自体に影響を与える可能性があります。2つの完全に異なるマシンにデータがあり、データが必ずしも同じであるとは限らないため、「2つのビューを表示するだけ」でも非常に困難になります。

私の提案は、あなたが望んでいることとは逆のことをすることです。最小限のグラフィックスで最初にネットワークコードを機能させます。実際、コンソールメッセージは、きれいなグラフィックよりもはるかに重要です。あなたはすでに他のゲームのグラフィックスを作成した経験があります-最初に最も疑わしいテクノロジーを使用してください。ネットワーク化されたコードがあなたに尋ねるすべてのことをよく理解し、その後グラフィックスに焦点を合わせます。

于 2013-03-25T17:32:55.943 に答える
1

通常、ネットワーク指向のゲームの場合、次の5つの概念にも留意してください。

  • イベント
  • 発車係
  • 同期
  • レンダリング
  • シミュレーション

イベント。ゲームエンジンはイベントソフトウェアです。つまり、ゲーム内の各汎用オブジェクト(ユニット、GUIなど)の状態に対して、アクションを実行します。つまり、関数を呼び出すか、何もしません。

ディスパッチャは、各イベントの変更を受け取り、その変更を別のサブシステムにディスパッチします。

同期とは、イベントの変更時に、ネットワーク内のすべてのクライアントに、その変更についてディスパッチャーをスローするように通知する必要があることを意味します。これにより、すべてのプレーヤーが他のプレーヤーの変更を確認し、同じものを同時にレンダリングおよびシミュレートできます。

レンダリングレンダリングは、各オブジェクトと描画画面のパラメータと関連する状態を読み取ります。たとえば、life_pointsという名前の各ユニットのプロパティがある場合、 life_points> 50の場合は通常のユニットを、 life_point>0およびlife_point<50の場合はダメージユニットを、 life_point=0の場合は破壊されたユニットを描画できます。レンダリングはオブジェクトに変更を加えず、オブジェクトから読み取ったものを描画するだけです。

シミュレーションはすべてのオブジェクトを読み取り、カウントの状態とプロパティを取得していくつかのタスクを実行します。たとえば、セロの寿命がある場合は、ユニットの状態をDEADとしてマークするか(たとえば)、GUIを変更するか、ユニットが近づくと別の敵チームに、状態を静的から別のユニットの近くに移動するように変更します。さらに、ここでは、ユニットの物理、位置の変更、回転などを作成します。すべてのオブジェクトがネットワークを介して同期されているため、全員が同じものを監視します。

よろしくお願いします。

于 2013-03-26T15:14:06.407 に答える
0

できるだけ早くネットコードを追加してください。これを行わない場合は、開発サイクルの後半で多くのエンジンをオーバーホールする必要がある可能性があるため、早い段階で行うことをお勧めします。

また、ゲームの複雑さにもよりますが、同じ原則が適用されます。最後の1秒でそれに取り組むのは最善ではありません

お役に立てれば!

于 2013-03-25T17:22:30.743 に答える