ゲームのクライアント/サーバーネットワークアーキテクチャについて学ぶために、マルチプレイヤーの小惑星クローンを実装しています。クライアント/サーバーテクノロジーに関するGafferOnGamesとValveの出版物を読むのに時間を費やしました。2つの概念に問題があります。
現在、私はbox2dで物理学をシミュレートし、世界の状態をクライアントに毎秒約20回送信する権威あるゲームサーバーを持っています。各クライアントは、受信した最後のいくつかのスナップショットを追跡し、2つの状態間で急いでスプライトの動きを滑らかにします。ただし、それほどスムーズではありません。それはしばらくの間滑らかになり、それから少しぎくしゃくした後、滑らかに戻るなどです。私はTCPとUDPの両方を試しましたが、どちらもほぼ同じです。私の問題が何であるか考えていますか?(注:最初にこれをシングルプレーヤーに実装しました。物理世界を1秒あたり20回のみ更新すると、スプライトの動きは60fpsで完全にスムーズになります)。
最初の問題を解決するために、クライアントがbox2dシミュレーションも実行し、一致しない場合はサーバーのスナップショットに一致するようにスプライトの位置を更新する必要があると考えました。私のシングルプレーヤーの実装はスムーズなので、これはもっとスムーズだと思いました。これはいいアイデアですか?
上記の問題が解決しない場合でも、クライアント側の予測に必要ですか?たとえば、プレイヤーが船を動かそうとすると、物理シミュレーションなしで小惑星、壁、または敵の船にぶつかったかどうかをどのように知ることができますか?彼らの船は、衝突するはずのオブジェクトを通過したように見え、サーバーからオブジェクトに衝突したというスナップショットを受け取る前に見えます。
ありがとう!