3

私はUDPを介してネットワーク化された小惑星を実装しています。クライアントが送信するユーザー入力メッセージを状態の変化だけに制限しようとしていました。したがって、矢印キーまたはスペースキーに下または上にキーがある場合にのみメッセージを送信してください。これにより、クライアントから送信されるパケットの量が大幅に削減されます。

しかし、ネットワーク物理学に関するGaffersの記事、UDPメッセージの信頼性を高めることに関する彼のより複雑な記事を読み直したので、私は再考しています。彼は次のように述べています。

The key to making this input stream tolerant of packet loss and out of order delivery is the inclusion of a floating point time in seconds value with every input rpc sent. The server keeps track of the current time on the server and ignores any input received with a time value less than the current time. This effectively drops any input that is received out of order. Lost packets are ignored.

したがって、パケットが失われた場合でも問題ありません。今、船を前進させるためのキーダウンを示す重要なパケットは、失われ、決して憤慨せず、ゲームを壊す可能性があると考えています。

したがって、クライアントは、パケット損失に耐えるこのスキームに適合するように、状態変化ではなく、実際のキーボード状態のより定期的な(すべての物理更新まで、1秒あたり50回)ダンプを送信するように強制されると言っているのは正しいですか?それとももっと高貴な方法がありますか?

4

3 に答える 3

2

すでにコメントで述べたように、それらすべてを支配する答えはありません。

しかし、あなたの場合、私はおそらくキーストロークを転送しませんが、代わりに物理学が変更されます:

  • 物理学の変化のみを転送します。たとえば、オブジェクト(プレーヤー、小惑星)の加速度が変化し、一般的なゲーム状態(小惑星/プレーヤーが爆発、ショット、スコア)に変化した場合などです。
  • その際、ラグを補正するためにそのオブジェクトの現在の位置も転送し(3msしかない場合でも、オブジェクトの位置は少し異なります)、適切なオブジェクトの位置を更新します(オブジェクトのように見える場合があります)。少しジャンプしますが、ほとんどすべてのゲームにこの問題があります)。
  • 他のすべて(重力などの世界の物理学)はクライアント自体で計算でき、ネットワーク経由で転送する必要はありません。
于 2012-04-05T09:06:18.010 に答える
0

私がgamedevで尋ねた同じ質問への回答に基づいて: https : //gamedev.stackexchange.com/questions/26840/send-regular-keyboard-samples-or-keyboard-state-changes-over-networkキーボードの状態が変化したとき(キーダウンまたはキーアップ時のみ)にのみ送信するようにします。これにより、トラフィックはほとんど生成されません。これらのメッセージが信頼できるものであることを確認する必要があります。メッセージはタイムクリティカルであるため、これは達成するのが難しい課題です。つまり、クライアントが自分のプレーヤーを移動できる場合でも (クライアント側の予測)、他のクライアントには、競合他社の状態の変化をサーバー経由で「リアルタイム」で通知する必要があります。

于 2012-04-05T16:57:24.037 に答える