【游戏开发】基于帧同步的网络同步框架原理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【游戏开发】基于帧同步的网络同步框架原理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2310字,纯文字阅读大概需要4分钟。
内容图文
![【游戏开发】基于帧同步的网络同步框架原理](/upload/InfoBanner/zyjiaocheng/1034/4fbe4947a9844fd3ada50d1b554ba68e.jpg)
一、帧同步的框架原理思维导图
二、保证逻辑帧与渲染帧分离
1.逻辑帧定时向服务器发送帧数据,服务器汇总定时下发,渲染帧根据逻辑位置跟进渲染,当有延迟或者断线时,模拟之前的操作,等待新数据或重连
2.客户端执行完每个逻辑帧后,根据游戏的状态计算出一个Hash值,用其标定一个具体的游戏状态。不同客户端通过对比这个值,即可判断客户端之间是否保持同步
三、逻辑帧如何保证同步
1.客户端需要保证一致性:
原则:所有的逻辑帧不一致会导致不同步
输入一致性:
保证玩家操作顺序唯一,确定性的碰撞检测和寻路结果等
计算一致性:
逻辑帧的计算遵循以下方法:
(1).服务器针对每个单局游戏开局时间生成随机数种子,逻辑帧计算均为伪随机
(2).浮点数采用多个定点数保存和运算,确保浮点数计算结果一致
(3).每个网络包都包含自增序号,具体算法可根据项目自行定义
(4).严格控制静态变量(全局变量)的使用
(5).禁止使用不稳定的排序算法
(6).禁止使用顺序不确定的数据结构
(7).尽量不使用非开源的第三方库(无法确定第三方库中是否有上述的结果不一致算法)
四、版本控制
进入单局游戏前需要确保客户端代码及数据版本一致,逻辑上有差异或数据上有差异的客户端版本都可能会导致帧同步失效。
如果当前线上存在多个版本,则只有同版本玩家可匹配到单局游戏中。
五、如何确保实时(战斗流畅)
1.逻辑帧保证在18帧上下
数据包冗余发送,发送数据量较少的当前帧时,可以把前几帧数据合并发送
2.渲染帧保证在30帧以上
常见的客户端预测,客户端插值,服务器延迟补偿方法保证客户端画面流畅
六、网络流量优化
1.业务层采用尽可能小的数据结构进行存储和计算
2.合并同批发送的包,减少包头信息冗余
七、如何处理丢包
1.自增序号确认
2.发送端数据堆积:控制发送频率
3.数据包过大:分包,重组
4.接收端卡顿:独立线程执行接收函数,缓存数据
5.合理设置RTO(重传超时时间)
八、如何处理断线重连
服务器一次性把断线后的关键逻辑帧发给客户端,客户端渲染帧加速播放追赶逻辑帧
九、防作弊思路
1.视野外挂
划分地图区域
玩家信息分层
2.属性外挂
多客户端状态校验,如上文的Hash值校验
十、其他常见问题
1.物理逻辑帧更新不频繁,会不会导致物理引擎计算结果不精准?
不会,在每一帧进行射线检测算法,计算你每一帧的具体状态,进行及时检测。
更新频率慢可以减轻CPU运行压力。
2.帧同步计时器是如何计时的?
帧同步计时器是由服务器来计时和反馈的,客户端只进行模拟时间,执行操作每一帧,协程在逻辑帧是禁止使用的,因为协程更新是根据渲染帧来走的。
Update处理渲染帧逻辑(表现相关),比如平滑移动,平滑转向,帧时间算法等等。
3.逻辑帧已经发生碰撞了,但渲染帧还在缓动,如何进行处理
逻辑帧刷新状态只会比渲染帧快,不会比渲染帧慢,渲染帧的所有平滑都是基于已收到逻辑帧数据来做的。
内容总结
以上是互联网集市为您收集整理的【游戏开发】基于帧同步的网络同步框架原理全部内容,希望文章能够帮你解决【游戏开发】基于帧同步的网络同步框架原理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。