私の友人はJavaを使用してこのゲームを開発しました、そして彼らは私にそれのために多層をするように頼みました。小惑星のような横スクロールシューティングゲームです。私はそれがソケットを処理しなければならないことを知っています、そしてidは一定の接続を持ちそして前後にデータクラスターを持たないためにudpよりもtcpを使うことを好みます。クライアントとサーバー、またはその逆に文字列を送受信するプロトタイプがあります。しかし、これをゲームにどのように実装しますか?船のx座標とy座標を、ゲームをホストしているゲームに送信してから、他のゲームの座標を送り返しますか?どんな助けでも大いに感謝されるでしょう。
2 に答える
私はあなたのゲームのためにこの構造を提案します:
- ゲームをホストして計算を行うサーバーを作成します。
- サーバーに、画面内を移動するオブジェクト(敵)を作成して処理させます。この方法では、データサーバー->クライアントを送信するだけでユーザーインターフェイスを更新できます。
- 宇宙船に関しては、サーバーはすべてのクライアントを同時に更新する必要があるため、クライアント側では、動きがあるたびにx、y座標をサーバーに送信してから、すべてのプレーヤーに新しい位置をブロードキャストします。クライアント側で生成された撮影やその他のイベントについても同じことが言えます。
- 2つのオブジェクトが衝突する場合(たとえば、レーザーと敵)、これはサーバーによって処理され、オブジェクトと船の位置の両方があります。
クライアントは、オブジェクトの座標を読み取り、それらを描画して、船/レーザーの位置をサーバーに送信するだけで済みます。サーバー
はオブジェクトを生成し
、その位置をすべてのクライアントに送信します。同時に、船の位置を読み取り、ユーザーインターフェイスを更新します。
データの送信/読み取りは難しい場合があります。これを行うにはいくつかの方法があり、今のところ理解しやすいものによって異なります。後で改善することができます。
- ゲーム全体を通して、サーバーはオブジェクトの位置を送信し続けます。
画面上のオブジェクトの数が常に同じであるとは限らない場合は、現在のオブジェクトの数とその座標を含む文字列を送信します。クライアント側は、前に指定した番号を使用してこれらの座標をループします。 - 船についても同じことが言えます。固定数になると思いますので、座標を送っていただければと思います。
- 文字列内では、受け取ったときに読み取れるように、座標を何かで区切る必要があります。
そのための1つの方法は、特定の文字でそれらを区切ることです。"x1、y1; x2、y2; x3、y3; x4、y4; ..."
または、を送信しているので
( "、"xyと";"の間の座標セット)String
、常に同じ量の文字でそれらを記述します(たとえば4)"0012054201620104"(x1:12、y1:542; x2:162、y2:104)
- 最後に、送信するすべてのパケットにヘッダーを追加して、それがオブジェクトの座標のリストなのか、船の座標のリストなのかを確認することをお勧めします。
さて、これはいくつかの方法で行うことができます。オブジェクトがあるとしましょう: - Space_1,Space_2,....Space_n を宇宙船オブジェクトとして
ゲームが進むにつれて、画面は宇宙船のオブジェクトでいっぱいになりますゲーム内のすべての space_x 要素の x、y 座標を取得するたびに、座標も送信します
したがって、クライアント マシンでのゲームには、- あなたの座標の point1 (x,y) - (対戦相手の) 他の宇宙船の point_2....point_n (x,y) - x,y を更新するたびに相手が変わる
ローカル アプリケーションで宇宙船の射撃を処理します。たとえば、スペース 3 を撃ってヒットしたとします。スペース 3 がヒットしたことをサーバーに送信するため、サーバーでこの船が死亡しているとフラグを立てます。他のクライアント (他のユーザー/プレイヤー) の場合サーバーから更新呼び出しを取得すると、それらすべてが space_3 がヒットしたことがわかります
抽象的すぎる場合も、これが役に立てば幸いです