5

私は node.js を学習するプロジェクトに取り組んでおり、リアルタイムでユーザー データの同期を処理する方法についていくつかの提案を探していました。

2D の長方形のマップ (およそ 600x400) があり、多数のプレイヤーがそのマップ上の x、y 位置を占めているとします。各ユーザーは、矢印キーを使用して移動し、基本的な方法で他のユーザーと対話できます。これが HTTP 経由で再生されることを考えると、ユーザー データの処理と同期に関して、最もスムーズで機敏なエクスペリエンスを提供するための最適な設計パターンは何でしょうか?

いくつかのオプションを考えることができますが、さらにいくつかのアイデア/説明をいただければ幸いです。

  1. クライアントは位置データをサーバーに送信し、サーバーはすべての位置をすべてのクライアントに配布し、画面は結果とともにレンダリングされます。繰り返す。欠点は、データの往復にかかる時間によってクライアント側が遅れることですが、利点は、すべてのユーザーと同期されることです。

  2. クライアントは常にあると思う場所をレンダリングし、位置データをサーバーに送信し、サーバーはすべての位置をすべてのクライアントに配布し、クライアント データからの画面レンダリングはサーバー データで修正されます。良い面は反応が速く、悪い面は同期がわずかに失われることです。

  3. 2 つのブレンドですが、(x,y) 座標を使用する代わりに、[前の x/y と時間、現在の x/y と時間、時間間隔での推奨 x/y] のベクトルを使用します。常に変化する発射体の経路を描くために使用されます。これを実装するのは難しいようです。

ポインタはありますか?

4

1 に答える 1

5

ほとんどのゲームは、何らかの形式の推測航法http://en.wikipedia.org/wiki/Dead_reckoningを使用します。これにより、サーバーから配信される遅延更新が可能になりますが、クライアントではリアルタイム更新の錯覚が維持されます。

最適なオプションは 3 です。特に複雑ではありません。ゲームの仕組みに基づいて各アクターがどこにいると予想されるかを追跡するだけで、サーバーから更新を受信すると、時間の経過とともに 2 つの状態が一致します。

サーバーが送信する状態が、クライアントが想定している状態とはかけ離れている (定義が必要すぎる) 場合は、サーバーの状態にジャンプして、クライアントの不連続性を受け入れることができます。

于 2011-08-20T12:23:52.007 に答える