1

私はプロジェクトに取り組んでおり、packetreader/packetwriter クラスに問題があります。

基本的にゲームがロードされ、プレイヤーはセッションを作成または参加できます。これらのオプションのいずれかを選択すると、ロビー画面に移動します。この部分は正常に動作します。ロビー画面で、3 つの異なるオプションから選択し、準備ができたらゲームを開始することを選択できます。オプションは、プレイヤーを表現するためにロードするテクスチャの詳細を示しており、この時点では単に異なる色の四角になっています。すべてのプレーヤーが開始すると、ゲームがプレイされるゲームプレイ画面に移動します。遅いコンピュータがホストである場合、完全に正常に動作します。ただし、高速のコンピューターがホストである場合、低速のコンピューターが PacketReader オブジェクトと PacketWriter オブジェクトを介して渡されたすべての更新の実行を完了する前に、ゲームプレイ画面にロードされます。

すべてのプレーヤーがそれらのストリームからのデータの読み取りを完了するまで待ってから続行する方法はありますか? クライアント サーバー デモhttp://xbox.create.msdn.com/en-US/education/catalog/sample/network_csのコードと NetworkStateManagement という名前のプロジェクトのデモを使用していますリンク)私の推論と論理の基礎として。どんな助けでも大歓迎です。

私が得ているものの例。Halo Reach では、ロビーにプレイヤー 1、2、3、4、5 の 5 人がいるとします。プレイヤー 1 が鎧の一部を変更すると、ロビーと実際の試合の両方で、他の各プレイヤーの画面で更新されます。私のゲームでは、各プレイヤーは色付きの正方形で表されます。プレーヤー1が赤を選択し、プレーヤー2が青を選択すると、それに応じて変化する場所が必要です。ロビー画面は、各プレイヤーのリストと 5 つのメニュー オプションで構成されます。最初のメニュー オプションは Start Game で、残りのオプションはプレイヤーが選択できるさまざまな色です。Start game が選択されると、NetworkSession オブジェクトで使用されるプレイヤーの isReady 状態が切り替わります。これは、プレーヤーがホストであり、全員が自分自身を準備完了としてマークした場合に実行される Update 関数のコードです。

else if (networkSession.IsHost && networkSession.IsEveryoneReady) 
{ 
     // Before starting the game make sure the server has gone through and updated. 
     // Also go through each player and make sure they have been updated so that no information is left in the packetReader and packetWriter 
     if (packetReader.Length > 0) 
     { 
         UpdateServer(); 
     } 
     // Read any incoming network packets. 
     foreach (LocalNetworkGamer gamer in networkSession.LocalGamers) 
     { 
         if (gamer.IsHost) 
         { 
             ServerReadInputFromClients(gamer); 
         } 
         else 
         { 
             ClientReadGameStateFromServer(gamer); 
         } 
     } 
     // The host checks whether everyone has marked themselves 
     // as ready, and starts the game in response. 
     networkSession.StartGame(); 
} 
4

0 に答える 0