練習するために、マルチプレイヤーゲームを開発しようとしています。NODEJS と HTML5 キャンバスを使用しています。クライアントとサーバー間でデータを共有するには、Socket.io を使用しています
私が知りたいのは、クライアントとサーバーのデータ転送を最適化する方法です。
情報
プレーヤーは常に動いており、1000/60 ミリ秒 (60 fps) ごとにプレーヤーの位置を更新する必要があります。
プレイヤーの動き:
vecX = mouse.x - player.x;
vecY = mouse.y - player.y;
vec = Math.sqrt(vecX*vecX + vecY*vecY);
dx = vecX/vec;
dy = vecY/vec;
player.x += dx*player.speed;
player.y += dy*player.speed;
- 私が試したことは?
1 回目の試行:
クライアントは、マウスの移動ごとにマウスの位置をサーバーに送信します。
サーバーはマウスの位置を保存します
サーバーは、1000/60 ミリ秒ごとにプレイヤーの位置を (各プレイヤーのマウスの位置によって) 更新し、画面上にその位置があるすべてのプレイヤーにそれを取得します (画面はマップの一部を表示します)。
-> 問題: 大幅に遅れる。
2 回目の試行:
クライアントは、マウスの移動ごとに (マウスの位置ではなく) dx と dy をサーバーに送信します。
サーバーは、この dx と dy をすべてのプレイヤーに取得します。
クライアントは、dx と dy によって各プレイヤーを移動します。
サーバーは、dx と dy によって各プレイヤーを移動します (サーバー側のデータを更新するだけです)。
サーバーは 100 ミリ秒ごとにプレイヤーの位置を取得します (位置の修正)。
-> 問題: 同期されていないデータ