我有一个基于网格的多人游戏。我使用的后端服务有一个选项来发送结构化数据包或非结构化数据包。我使用结构化数据实现了所有网络代码,现在用非结构化数据替换更频繁的调用(这些数据更小,因为它们是字节数组)
我的游戏网格不到16高和宽,所以对于移动调用我只需要发送一个字节。最左边的4位是X值,最右边的4位是Y值。
我有一些方法可以将游戏中的2d坐标转换为单个字节并返回。这些方法有单元测试,似乎完美无缺。 他们在这里......
public static byte CoordToByte(Coord cord)
{
byte pos = (byte)(cord.x <<4) ;
pos += (byte)cord.y;
return pos;
}
public static Coord ByteToCoord(byte input)
{
return new Coord(input >> 4,input & 0x0F);
}
我遇到的问题是,当我使用后端服务通过互联网发送和接收数据时出现问题。每当一个玩家发送一个8或更多的X值时,我总是在另一端收到值11111101,这与Y值无关。
这是我用来发送和接收非结构化数据的代码。要发送数据,后端服务要求您发送一个字节的ArraySegment 当接收数据时,有效载荷将作为Stream类。
我假设我在这里做错了但我不知道。
//SENDING POSITION
ArraySegment<byte> unstructuredData = new ArraySegment<byte>(new byte[]{CoordTools.CoordToByte(here)});
//GETTING POSITION
byte fromthem = (byte)_packet.Stream.ReadByte();
Coord moveto = CoordTools.ByteToCoord(fromthem)