2

RTS ゲームにマルチプレイヤーを実装しようとしています。ターン制ではないので、UDP で行くべきだと思いますよね?

また、クライアントからサーバーに何を送信する必要があるかについても少し混乱しています。ゲームに表示されるすべてのオブジェクト (建物、木、ユニットなど) は、GameObject 型の ArrayList にあります (位置とそのすべてを追跡します)。したがって、1 つの方法は、クライアントに ArrayList をサーバーに送信させ、それを他のものとマージしてから送り返すことです。もう 1 つの方法は、クライアントの入力 (どこをクリックしたか、何を選択したかなど) をサーバーに送信し、サーバーに何が起こるかを決定させることです。ユニットなどに命令を下すときは、それは遅延を引き起こします.

だから私の質問は、UDP/TCP の使用に関するものを除いて、マルチプレイヤー部分をどのように構成する必要があるかということだと思います。クライアントからサーバーなどに送信する必要があるもの。

4

1 に答える 1

4

あなたが説明しているネットワークのタイプは、失われたデータ (FPS など) を処理できる可動部分がほとんどないリアルタイム ゲームに最適です。RTS ゲームの問題は、通常、標準の UDP 状態複製モデルで複製するにはユニットが多すぎることです。代わりに、ほとんどの RTS ゲームはロックステップと呼ばれるものを使用します。これは、各マシン間でゲームの状態を同期し、マウス クリック イベントをゲームのすべてのプレイヤーに転送することによって機能します。ゲームの初期状態が同じで、同じイベントが適用されている場合、ゲームはすべてのプレイヤーに同じように見えます。TCP または UDP プロトコルのいずれかを使用してこれを実現できますが、TCP の方がおそらく簡単です。

Age of Empires のロックステップについて読む:

28.8 で 1500 人のアーチャー: エイジ オブ エンパイア以降のネットワーク プログラミング

ゲーム内の各ユニットのステータスを渡すのではなく、各マシンでまったく同じシミュレーションを実行し、ユーザーが同時に発行した同一のコマンド セットをそれぞれに渡すことが期待されていました。PC は基本的に、最高の戦争映画の伝統でゲーム ウォッチを同期し、プレイヤーがコマンドを発行できるようにし、まったく同じ方法で同時に実行し、同一のゲームを実行します。

于 2013-08-18T15:02:39.397 に答える