2012-01-20 7 views
12

websocketsとnode.jsサーバーを使用する2プレーヤーのポンゲームを作りたいと思います。 socket.ioは、クライアントとサーバーの両方で使用されます。これまでのところ、私の唯一の経験はチャットアプリケーションの作成です。リアルタイムゲームにwebsocketsを使用する方法

これはマルチプレイヤーゲームで初めての試みです。そのため、ネットワークゲームに慣れていません。サーバーは次の情報を把握する必要があります:

  1. ボールの位置はどのくらいですか?頻度と頻度はどのくらいですか?
  2. プレーヤーの動き、プレーヤーが左右に動いている、しばらく押すとどうしたらいいですか? pressHoldStartPositionpressHoldStopPositionのように送信する必要がありますか?私は押すだけで、押したままにしておけば、これは簡単だと思います。

私の考え:

  1. ボールがプレーヤーを打つ、クライアントは速度を計算し、開始と終了位置と、他のクライアントがそのからの正しいアニメーションを実行する必要があります。
  2. いいえ、考えられません。
+1

あなたは間違いなく@RobHawkesブログをご覧ください:http://rawkes.com/彼はRawkets http://rawkets.com/と呼ばれるHTML5マルチプレイヤーゲームを開発し続けています。私は、あなたが探しているものと非常に関連性の高いテーマや、あなたが遭遇する追加のものについて、彼がたくさんの情報を共有してくれると確信しています。 – leggetter

答えて

13
  1. クライアントは、次のゲームステップ*(サーバーアンワース)を予測しない限り、何も計算しません。全体のゲームは、データと計算の唯一の唯一の信頼できるソースであるサーバー上で実行されます。オブジェクトが10個未満のようなゲームのようなポンでは、データをかなり頻繁に送信することができます(50msの間隔があります)。ボールについては、パドル[x、y]に対して[x、y、速度、または角度]を送ります。 その後、古い(x、yはクライアント)とnew(x、yはサーバーから取得したもの)を補間(時間 - 50msのアニメート)します。

  2. 「プレイヤーが押している」、「プレイヤーが100ミリ秒間押している」、「プレイヤーがセットしている」などの情報を含む各時間(100ミリ秒) 、100)、サーバー側でこの移動が可能かどうかを確認し、受け入れるか拒否します。

たぶん、このスレッドは、あなたの冒険を助ける:

Multiplayer JavaScript game built with Node.JS - Separating players

[* 1] preditctionはあなたが後で実装できる遅れ補償メカニズムです。簡略化して、サーバとクライアントがゲームロジックコードを共有し、クライアントがサーバからの現在のデータを持たない場合、実際のゲームで何が起きているのかをシミュレートしようとします。

2

ゲームネットワーキングに関する書籍を書籍で探すつもりです。

簡単な説明では、私は興味深い実装を見つけています: サーバーとクライアントがゲームの物理を計算します。クライアントは、エンティティの状態を「予測」してスムーズなアニメーションを維持しようとしますが、サーバはマスターになり、すべてのエンティティが正しい状態になります。 クライアントは定期的にサーバーからエンティティの正しい状態を更新します。一部のゲームでは、エンティティが突然テレポートされることがあります。これは、クライアントの予想位置がサーバーの実際の位置と一致しないためです。

ボールやプレーヤーなどのエンティティの状態には、通常、位置、速度、ボタンの状態(キーダウン/キーアップ)などの情報が含まれています。

それ以外にも、あなたの想像力を揺さぶって、最良の解決策を見いだし、何が効果的であるかをテストしています。プレーヤーの待ち時間や帯域幅など、考慮すべき点はたくさんあります。

2

ゲーム開発に専念stackexchangeサイトがあります:https://gamedev.stackexchange.com/

ベストプラクティスは、クライアントのみが知る必要がある更新を送信することです。また、一般に、ユーザーアクションの結果を送信し、アクション自体は送信しません。定期的な同期点を除き、時間の経過とともに誤差を累積し、リモートユーザのアクションと同期する浮動小数点エラーを考慮に入れて、計算することができるもの(物理)は送信する必要はありません。これにより、ゲームはよりインタラクティブに見えるようになり、ネットワークの待ち時間とジッタに起因するスターターの一部をカバーします。

このモデルの主な欠点は、ネットワークの待ち時間やパケットが低下している場合は、物理計算が続行されるときに発散するタイムライン効果が得られ、突然リモートユーザーから何か私たちがまだ捕らえていなかった物理学に影響を与えます。しかし、これはほとんどのネットワークゲームでは標準的な問題であり、ほとんどのタイプのリアルタイムゲームでは選択肢が悪化しています。

関連する問題