0

これは私のコードです:

//Code for host
case (GameState.PlayingAsHost):
{
  session.Update();

  while (session.LocalGamers[0].IsDataAvailable) //Recieve data
  {
     NetworkGamer sender;
     PacketReader reader = new PacketReader();

     session.LocalGamers[0].ReceiveData(reader, out sender);

     guestPaddle.Position = reader.ReadVector2();
  }

  hostPaddle.Update(); //Update paddle position

  var packetWriter = new PacketWriter(); //Send data
  packetWriter.Write(new Vector2(hostPaddle.Position.X, 50));
  session.LocalGamers[0].SendData(packetWriter,SendDataOptions.InOrder);

  break;
}

//Guest Code
case (GameState.PlayingAsGuest):
{
  session.Update();

  while (session.LocalGamers[0].IsDataAvailable)//Recieve data
  {
     NetworkGamer sender;
     PacketReader reader = new PacketReader();

     session.LocalGamers[0].ReceiveData(reader, out sender);

     hostPaddle.Position = reader.ReadVector2();
  }

  guestPaddle.Update(); //Update paddle position

  var packetWriter = new PacketWriter(); //Send data
  packetWriter.Write(new Vector2(guestPaddle.Position.X, 50));
  session.LocalGamers[0].SendData(packetWriter, SendDataOptions.InOrder);

  break;
}

これは卓球マルチプレイヤーになります (したがって、パドルの名前)。ゲストが受け取る前にパッケージを送信する前は、ゲストとしてプレイしているときにホストの X 位置がゲストの X 位置に設定されることを除いて、コードは機能していました。ゲストとホストがデータを送信する前に受信するように変更すると、問題が解決するかどうかをテストしていました。そうすることで、ホストは次のエラー メッセージを受け取ります。「ストリームの終わりを超えて読み取ることができません」。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

あなたのswitchandはcase、 のよりも効率的な方法である可能性があるためだと思いますif

の動作を再現するには、大文字と小文字ifを区別するか、括弧で囲む必要がありbreakます。あなたがこれに気づいたのか、それとも問題なのかはわかりませんが、ゲスト ケースがホスト ケースの中にあるため、ブラケットがめちゃくちゃになっているようです。

//Code for host
case (GameState.PlayingAsHost):
{
  session.Update();

  while (session.LocalGamers[0].IsDataAvailable) //Recieve data
  {
     NetworkGamer sender;
     PacketReader reader = new PacketReader();

     session.LocalGamers[0].ReceiveData(reader, out sender);

     guestPaddle.Position = reader.ReadVector2();
  }

  hostPaddle.Update();

  var packetWriter = new PacketWriter(); //Send data
  packetWriter.Write(new Vector2(hostPaddle.Position.X, 50));
  session.LocalGamers[0].SendData(packetWriter,SendDataOptions.InOrder);
}

//Guest Code
case (GameState.PlayingAsGuest):
{
  session.Update();

  while (session.LocalGamers[0].IsDataAvailable)//Recieve data
  {
     NetworkGamer sender;
     PacketReader reader = new PacketReader();

     session.LocalGamers[0].ReceiveData(reader, out sender);

     hostPaddle.Position = reader.ReadVector2();
  }

  guestPaddle.Update();

  var packetWriter = new PacketWriter(); //Send data
  packetWriter.Write(new Vector2(guestPaddle.Position.X, 50));
  session.LocalGamers[0].SendData(packetWriter, SendDataOptions.InOrder);
}

これは機能するはずです。メソッドの内容がわからないため*paddle.Update()、ケースから移動する必要がある場合があります。

于 2013-10-23T23:30:35.733 に答える