#yyds干货盘点# 网络游戏状态同步玩家移动

状态同步是指对值(例如联网游戏对象上的脚本包含的整数、浮点数、字符串和布尔值)进行同步。 客户端将所有的操作发送给Server(T1),由Server计算(T2),并返回结果(T3) 状态同步服务架构能够防止很多的作弊,但是直接用这种方法会让游戏的响应变得迟缓。 如果 T1 + T2 + T3 非常大,则游戏体验会非常差。比如,客户端1释放了一个技能,1000ms 后才收到响应,这个游戏体验非常差。 所以状态同步服务器降低延迟是最重要的事情之一。 ​ 下面以任务移动为例子,讲解一下游戏状态同步问题 第一种方法deadreckoning 加入客户端1发生了移动,客户端将移动命令发送到服务器,然后服务器返回移动位置,理想情况下,可能需要100-200ms的延时,当延时大于100ms时体验就不太好,我点了移动要慢一会人物才会移动,这里就要讲讲一个deadreckoning算法,下文简称DR, DR提供了隐藏延时和减少带宽的方法。DR在本地模拟其他联网玩家状态(主要是位置信息),减少网络带宽消耗的同时尽可能的还原实际情况。 例子: 同一个场景2个玩家分别是A和B; 对于A,是否需要发送移动命令是通过阈值控制的。实际运动位置是P1,而DR算法模拟得到的运动位置是P1′,如果P1-P1′大于预先设置的阈值就发送移动命令到服务器。 服务器没有收到A的移动命令,需要模拟对方的运动,DR提供了几种经典算法: (1)位置1 = 位置0,就是保持不变 (2)位置1 = 位置0 + 速度 × (T1 – T0),根据A的移动命令数据,做匀速运动 (3)位置1 = 位置0 + 速度 × (T1 – T0)+ 1/2 × 加速度 × (T1 –T0)平方,比2)中多了加速度的方向 在游戏中应用的比较多的是2)和3)。 ​ 第二种按固定帧间隔(如100ms)同步(流量消耗较大) 每帧上报一次位置、方向、速度。通过强制每帧只能改变方向一次,可以保持预测的准确性。此法要求更多的带宽,但是相比 DR,画面显示会更加的精确。客户端播放所有其它人的过去的精确位置,以及播放本地的最新位置,这将导致有100ms时差。

尚美源码坑位教程提供精美的网站源码教程,小程序、公众号、H5、APP、游戏、直播、支付、区块链、商城、影音、小说等源码信息大全。
尚美源码教程库 » #yyds干货盘点# 网络游戏状态同步玩家移动
赞助VIP 享更多特权,立即登录下载海量资源
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡