2012-03-05 6 views
2

私は、フラッシュで単純なペースペアの2次元リアルタイムマルチプレイヤーゲームを開発しています。プレイヤーは、ファッションを動かすために狙って歩いて歩くだけです。私はTCPソケット接続を使用します(AS3はUDPを提供しません)。ゲームネットワークのレイテンシ補正

私が欲しいのは、プレイヤーの行動をプレイヤー2、プレイヤー3と同じように見ることができるようにすることです。または、近くの表現(ポジション、ダメージを受けるなど)を見ることができます。

私は動きベクトルの座標を知っています。私はそれらを待ち時間を使って簡単に補間することができます。 しかし、どのくらいの時間(T1)がクライアントのサーバーのクライアント2を移動して、のT1に基づいて状態の更新を行ったかを判断する効果的な方法を見つけることができません。 (あなたが知っている、pingの時間はかなり変動するかもしれません)。

私は上記を行う方法が必要です、私は可能な限り高速かつ正確であるが非常に洗練されていない方法が必要です。 (私は何のアルゴリズムを使うべきですか?タイムスタンプは何か、何か? - わかりません)

+1

http://gamedev.stackexchange.com/questions/552/synchronizing-clients-with-a-server-and-with-each-otherおよびhttp://gamedev.stackexchange.com/questions/6645/を参照してください。遅れ補償ネットワーク付き2dゲーム –

答えて

4

まず、サーバーは常に世界全体に関する情報を更新する必要があります。すべてのクライアントは、サーバーに再生操作(つまり、プレーヤーが何をするか、動きや射撃など)を送信し、圧縮データを使用します。

"ワールド"をリージョンに分割します。各プレイヤーはもちろん制限された視野しか持っていないので、一度にすべての世界を見ることはできません(幸いにも)ので、彼は見ることができる地域だけに更新を加える必要があります。

そうなものは次のとおりです。

  • サーバーが世界を生成し、地域に分割します。
  • プレイヤーは世界に入ると、それは結果を持っているプレイヤーの各アクション、全世界の一般的な情報と、視力
  • 内の領域についての詳細な情報を取得するには、取得サーバー(圧縮)に送信する必要があります情報。ステータスの変更は、1つのまたは複数の領域を変更する効果を持っている場合は、それらの領域に興味を持って、各ユーザーが変更通知

を受けなければならないことは、パブリッシュ/サブスクライブ・デザインパターン(オブザーバー)のように見えますが、

  • 各クライアントはパブリッシャであり、サーバはプレーヤステータスの変更に関するサブスクライバです。
  • サーバはパブリッシャであり、クライアントは世界中の変化に関心があるが、各プレイヤーが興味を持っている地域のみの購読者です。これは、移動による定期購読の変更(地域)の特定のオブザーバーです。
関連する問題