2017-04-22 2 views
11

Libgdxを使用して人気のあるゲームPongのオンライン版を開発しています。 GoogleのRealtime Multiplayerサービスを使ってプレイヤー間でゲームデータを送信し始めましたが、私が直面している同期の問題を解決する方法を理解できません。Playサービスのリアルタイムマルチプレーヤーの同期方法

現在送信されている情報はプレーヤーのパドルなので、移動すると新しいポジションが相手に送信されます。相手がそれを受け取った時点で、時間はすでに過ぎており、同期は失われています。

最も遅い接続を使用する動きの間に多少の待ち時間があるはずですが、どうすれば滑らかに見えるのですか?

答えて

1

この質問に対する明確な答えはありませんが、人々はこの状況を解決するために適応させる様々な戦略があります。

UDPプロトコルを使用しているからです(ソケットベースの通信を使用している場合は、すべてのmsがリアルタイムゲームに関係するからです)。 -api)は補間へのメッセージ交換、推測航法、クライアント側の予測などはほんのわずかです。

これは非常に広大なトピックです。私がマルチプレイタンクベースのゲームを作ったとき、私は物事を少しスムーズに見せるためにいくつかのことをしました。

  1. サーバーに移動を送信するために使用されるUDPプロトコル。
  2. プレーヤーのクライアント側に2つのエントリを保存します。 1つは現在の値で、1つは設定する値です。次に、現在の値に0.3fのようなスムージング係数を、設定する値と等しくない時間に掛けます。 (これはジッタを減らすのに役立ちます)
  3. 私は重要なメッセージをTCP経由で送信します。

私が言及したポイントは、私が試合でやったことを説明していますが、どのゲームでも使用できます。私はGaffer on Games

と呼ばれるこのウェブサイト上の記事を読むことをお勧めしますが、ここでもこの地域は巨大で、何の答えはあなたを助けることはできません。私はこのトピックに関する私の論文を行なったし、まだあなたに決定的な答えを与えることはできません。あなたは多くの記事を読んで、必要に応じて学ぶものをモデル化しなければなりません。

0

Animation Interpolationのタイプを使用する必要があります。これは、パドルが新しい位置に「移動」しないが、新しい位置が受信された後ゆっくり移動することを意味します。

関連する問題