导语
之前我们压缩了整数(压缩方法一),Angle角度浮点数(压缩方法二),那么用来同步位置的FVector是否也可以压缩呢?
整数压缩部分是用编码解压实现的,属于无损压缩,Angle角度浮点数是用一个小范围的数据集来表示一个大范围的数据集,属于有损压缩。那么我们可能会问,如果同步的数据不一致,对于不同客户端的计算或者显示结果是否会有影响呢?比如一个游戏中,一个玩家在不同的客户端上的位置和方向存在较大的差异,那肯定是不行的。
实现思路
本次我的思路是对于特定情况下的一些数据压缩提供一种思路。比如我们的一个多人在线应用,用户的活动范围被限制在一定的范围内,也就是玩家的位置坐标的最大值能用更短的整数来存储。那么我们就有压缩的空间了。
上代码
1 | // 用短整形表示的坐标 |
总结
以上代码我们把坐标的范围控制在了 -3275.0 -> +3275.0 ,并且保留了一位小数点。对于位置精度不高,玩家获得范围不超过半径为32.75米的圆形区域(约3,367.8㎡)内的情况下,这种数据压缩节约了1/2的带宽。