位置同步策略

此思路参考的云风写的开发笔记
流程如下:

  1. 进入地图时做一次客户端和服务端的对时,以服务端为准,计算时间差,以后每隔一段时间(1分钟)对时一次。
  2. 客户端每隔一段时间(1秒),将当前运动状态(位置、速度、加速度)和时间戳T1同步到服务端。
  3. 服务端接到客户端同步后,立即推送给地图中的所有人的客户端。以下对于接收方是自己和其他人,

    两种情况分别讨论:

    1. 对于其他人,根据T1时刻的运动状态和当前本地时间T2,计算T2 + 1秒时刻的预测位置,反推当前的速度。
    2. 对于自己,根据T1时刻的运动状态和当前本地时间T2,计算当前时刻(T2)的预测位置,只要实际位置和预测位置相差不大,不用修正;否则直接移动到预测位置。

对于这套策略的总结如下:

  1. 以客户端的操作手感为先,服务端只做校验,防止作弊。这样对于自己来说,操作体验和单机无异;对于地图上显示的其他玩家,位置还原的精准程度取决于上述步骤2中同步的频率,理论上,频率越高则越精准,不过也会带来更高的网络和服务器开销,同时也要考虑游戏类型的实际需求,各方面因素综合考虑。
  2. 为了减小网络延迟的影响,采用对时和预测补偿的做法。对时是在进入地图的时候做一次,以后每隔1分钟再做一次,以防本地时间跳变带来的影响。预测补偿很重要,对于其他人的运动,我们总是预测1秒后的位置,再反推当前速度,为的是平滑处理,避免出现跳变。
  3. 保持一定的同步频率,还有一个好处是保持网络流量稳定,避免玩家在频繁操作时大量发包。例如,在带摇杆的游戏里玩家有可能会旋转摇杆在原地转圈,其实这种情况下其他玩家不用关心到那么细,只用保持一定采样频率即可。另外,就算客户端需要加入物理引擎也很方便,服务端不用做强验证,只要防止穿越地图这样的明显作弊即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值