5

私はマルチプレイヤーロールプレイングゲームを開発しています(いいえ、それはMMORPGではありません。;)

私の現在の設定はこんな感じです。

クライアントはサーバーに「前進したい」/「後退したい」と伝え、サーバーはエンティティを更新し、エリア内のすべてのクライアントに変更について通知します。サーバーはまた、各エンティティを20ミリ秒ごとに更新し、100ミリ秒ごとにクライアントに更新を送信します。これらの更新には、位置、速度、回転などが含まれます。

これまでのところ良いのですが、クライアント側のパケット間の移動をスムーズにするための準備は何もありません。私はそれを機能させることができないと言わなければなりません。私は予測、補間、デッドリコニングについて読んでいますが、それはすべて私にとって大きな混乱です。

だから今、私は「Position = Packet.Position」のようなことをしているだけで、非常に吃音の動きを引き起こします。

だから、私が助けたいのは、どうすればよりスムーズな動きを得ることができますか?XNA予測サンプルを見てきましたが、正しく理解できませんでした。

ありがとう

4

3 に答える 3

12

マルチプレイヤープロトコルに関するValveの説明を読んでください。これは有益であり、予測/補間を行う方法について非常に明確な例を示しています。

于 2011-01-18T22:20:55.933 に答える
3

別の質問からアイデアを提案します(受け入れられた回答を参照してください)

ここで、クライアントは、ネットワークゲームではないかのように、その位置自体を計算します。クライアントは定期的に現在の位置をサーバーに送信します。また、クライアントがチートしたり、選択した方向に移動し続けることができない場合、サーバーはクライアントに正しい位置を送信するだけです。

同じアルゴリズムがウルティマオンラインで使用されました(少なくとも10年前にプレイしていたとき)

于 2011-01-18T23:06:58.283 に答える
0

メインのエンティティと一緒にゴーストエンティティを実行することで解決しました。
ゴーストもフレームごとに更新されますが、パケットが着信するたびに、ゴーストの値はパケットの値に設定されます。

次に、実際のエンティティをゴーストのある場所に徐々に微調整します。

于 2011-01-19T13:56:45.757 に答える