私は、p2.js、フェイザー、node.jsを使用して、シンプルなレーシングゲーム(宇宙船、無重力)を作成しています。
私がしたこと:クライアントはサーバーから世界の状態を受け取ります:
- サーバーからの最新の速度/位置に基づいて他のプレイヤーを推定する
- クライアント側の予測が正しいかどうかを確認します-サーバーからの適用位置がなく、サーバーが認識していなかった入力を処理します。
- 固定物理ステップ
サーバ:
- クライアントから入力を受け取り、適用する
- 固定物理ステップ
- 各クライアントに世界の状態を送信します
現在、プレイヤー同士の衝突に苦労しています。衝突しているプレイヤーは、衝突中に常にジャンプしています。クライアント側の予測がサーバーと同様の結果を計算していないためだと思います。
サーバーはプレーヤーからのすべての入力を認識していません(ラグ)。
プレーヤーとサーバーが衝突しているプレーヤーの位置が異なります(ラグ)。
この2つを組み合わせると、クライアントはサーバーとは異なる衝突を解決し、世界の状態が到着したときにプレーヤーは大きな修正を行う必要があります。
サーバーのタイムステップを増やして、少なくとも修正を少なくすることは可能でしょうか?プレーヤーにサーバーと同じデータ(最後に送信された位置と他のプレーヤーの予測位置)を使用させようとしましたか?
—
user3797758 2016年
提案:サーバーのみに衝突を計算させようとしましたか?クライアントは、データをレンダリングして送受信するためにのみ使用されます(もちろん、受信したデータに反応します)。
—
Greffin28