2

大学のプロジェクトとして、(ネットワーク経由で)マルチプレイヤーを作成する予定のシンプルなゲームをコーディングしています。クライアント/サーバー通信の2つのシナリオを検討しています。

物理学(それらは些細なことです!実際には「衝突テスト」と呼ぶべきです:))はサーバーマシンでのみ処理されます。したがって、通信は次のようになります

Client1->Server: Pressed "UP"
Server->Clients: here you go, Client1 position is now [X,Y]
Client2->Server: Pressed "fire"
Server->Clients: Client1 hit Client2, make Client2 disappear!

サーバーはイベントを受信し、他のすべてのクライアントにブロードキャストします。

Client1->Server: Pressed "UP"
Server->Clients: Client1 pressed "UP", recalculate his position!!
[Client1 receives this one as well!]

どちらがいいですか?または多分それらのどれも?

4

2 に答える 2

5

通常のアプローチは、次の情報を送信することです。

  1. プレイヤーがいる場所
  2. 彼がそこにいる時間 (必ずしもリアルタイムではなく、ゲームの内部的な時間の概念を使用)
  3. プレイヤーの移動ベクトル (方向と速度)

その後、クライアントは推測航法を使用して他のプレイヤーがどこにいるかを推定できるため、ネットワークの遅延によるゲームの妨げが少なくなります。更新は、プレーヤーが移動の方向または速度を変更した場合 (他のクライアントが予測できない場合) にのみ送信する必要があるため、ネットワーク帯域幅も節約されます。

推測航法に関するいくつかのリンクを次に示します。同じ Web サイトには、おそらくより多くの記事も含まれています。 http://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php http://www.gamedev.net/reference/articles/article1370.asp

于 2010-05-16T18:00:28.167 に答える
2

最初のアプローチの方が良いと思います。したがって、すべてのクライアントで同等のデータがあります。

物理学が単純で、計算結果が常に同じである場合、2番目のアプローチも問題ありません。ただし、可能な乱数がある場合は、すべてのクライアントに異なる影響があります。

于 2010-05-16T17:43:45.707 に答える