主要的一些问题
0. 可能会很久没收到,,或者一下子同时受到很多个同步的包
关于坐标滞后导致的一些游戏逻辑问题,比如攻击命中的判定问题等,一般是以服务器数据为判定依据,逻辑判定还是以服务器为主,客户端主要做表现。
1. 插值
关于坐标上报频率,我采取的是每100ms 或是 坐标 或 角度 变动超过一定阈值才上报。
关于插值方案,我选择了最简单的线性插值,感觉效果也够用,网上还有一些其他的插值算法,可能效果会更平滑一些把。
2. 网络延迟
做预测, 在没有收到下一个同步点的时候,客户端自己做一个位移预测,让角色保持位移的状态,客户端简单地认为角色会保持当前的位移方向和速度继续运动(事实上也确实是保持运动状态的情况居多,变化居少)
之前经常发生进行同步的时候,第三方客户端上的角色最终停止的位置会比主客户端多走了几步的问题,这时因为对最后一个同步坐标也做了预测的缘故。 这里我们可以同步的数据包上加一个标记,标记当前点是否为终点,或者主客户端在发送完最后一个坐标之后立马再上报一条角色停止的消息,标记角色当前已停止位移,不需要再做预测。
会有收到最后一个点的时候,角色已经做了预测,并且走超了的情况,这种情况只能按照终点坐标做一个会拉的操作了,或者客户端设定了预测上限,在偏差值不大的情况下允许这种偏差存在也可以。
比如延迟超过500ms的延迟和抖动(500ms相当高啦!)会发生中间的还没来得及同步的坐标点被丢弃