2012-04-12 7 views
7

私はサーバー用にnode.js、クライアント用にHTML5キャンバスに埋め込まれた.jsファイルを使用して少しゲームを作っています。各選手は矢印キーで動き回ることができます。node.jsゲームの更新に関する質問

ここでは、2つの異なる方法でゲームを更新しました。変更するたびに、プレーヤーの新しい位置を送信していました。それは機能しましたが、私のサーバーは約60 x/yペアを1秒間に処理しなければなりませんでした(クライアントの更新速度は30秒で、2人のプレイヤーが直進していました)。 2つ目の方法は、方向速度を変更するときにプレーヤーのオブジェクトの新しい位置と速度/方向のみを送信することでした。したがって、基本的に他のクライアントでは、最後の更新からの方向/速度を使用してプレーヤーの動きを補間しました。私のサーバーは、ほんのわずかのx/y7speed/directionパケットを処理するだけでしたが、補間された位置がパケットに書き込まれた実際の位置から少し離れていたので、クライアントが到着したときに少し遅れることがありました。

私の質問は次のとおりです。どの方法をお勧めしますか?そして、どちらの方法に対しても、どのようにして遅れ補償を行うべきですか?

答えて

3

レイテンシが低い場合は、オブジェクトが描画される位置から新しい位置に補間します。低いレイテンシでは、それほど大きな違いはありません。

レイテンシが高い場合は、一種のEPICを実装できます。 http://www.mindcontrol.org/~hplus/epic/

ブラウザクエストでどのように行われているかを確認することもできます。 https://github.com/mozilla/BrowserQuest

幸運を祈る!

+0

この記事は、問題を解決するのに適した出発点のようですが、まだ解決策から分かりません:)) – mihai

+0

@mihai C++を理解すると、EPICライブラリのソースは明確です。コメント付きの2つのファイル(Extrapolator.hとExtrapolator.cpp) C++に慣れていない場合は、説明するか実装するための努力ができます。 – rromeroar

+0

これは問題ありません。私はソースコードを見ていない、ちょうどあなたが指摘した記事を読んでください。アルゴリズムの説明はかなり短く、私はそれを理解するのに苦労していましたが、意味があると確信しています。 – mihai