网络游戏帧同步技术理论知识梳理

首先感谢同行大佬们的分享,这里只是收集总结一下理论知识,后面会以代码实现。

先简单说一下状态同步:

假如有A,B,C三个玩家在同一个屏幕上

  1. A发技能攻击B,A会将请求发送到服务器
  2. 服务器计算A是否要以攻击成功B
  3. 将计算结果直接同步给A,B,C三方
  4. A正常攻击到B,B看到自己被攻击了,C看到A攻击了B。

可以看出来,状态同步的计算是服务器计算的,而帧同步的计算是客户端执行的,A攻击B之后,会将攻击指令直接同步给A,B,C,由A,B,C客户端自己计算并展示效果。

一般服务器同步帧频率是15帧/秒(实际上可以根据自己游戏的测试结束确定),15帧/秒是根据很多成熟的游戏实际操作测试得出来的一个值,游戏感比较好的一个值。因为人的操作是达不到这个值的,而客户端展示的帧率一般都是在60帧/秒及以上的。帧同步的另一个优点是同步的网络数据量比较少。SLG也大多数使用帧同步,但是它的帧率可以低一些,比如10帧/秒也可以接受。

状态同步与帧同步的对比:

帧同步一般会选择UDP的连接方式:

DUP里面的时序性,重传机制,应答机制,是需要自己去实现的。UDP没有最小延迟。

实现帧调度机制:

客户端以一定的频率向服务器同步指令,比如每秒20帧,就是50ms请求一次服务器,服务器会收集所有客户端请求过来的帧数据,然后服务器以一定的帧率同步给各个客户端。比如50ms循环一次,把50ms内收集到的所有客户端指令同步给所有的客户端。

相关推荐
甲维斯16 小时前
Fable5是真·神!用canvas手搓超级玛丽无bug!
人工智能·游戏开发
記億揺晃着的那天17 小时前
Windows 通过 Java 获取可用端口的一个坑:Hyper-V 保留端口导致 UDP 绑定失败
java·windows·udp
张学徒17 小时前
Godot 4.x 中导入Excel文件的最简单的方式
游戏·godot·gdscript·游戏开发
SmalBox18 小时前
【节点】[Bacteria节点]原理解析与实际应用
unity3d·游戏开发·图形学
用户8120271610518 小时前
芯棋:一个三维原创棋类的设计笔记
游戏开发
winlife_2 天前
全程用 AI 做一款商业级手游 · EP10 道具系统:让三个按钮真正改变棋盘
windows·算法·unity·ai编程·游戏开发·mcp·玩法系统
SmalBox2 天前
【节点】[VoronoiNoise节点]原理解析与实际应用
unity3d·游戏开发·图形学
阿钱真强道2 天前
28 鸿蒙LiteOS RK2206 LwIP Raw API 实现无阻塞UDP双向通信
udp·harmonyos·鸿蒙·lwip·开源鸿蒙
艾莉丝努力练剑2 天前
【Linux网络】网络层IP协议(二):网段划分
linux·运维·服务器·网络·tcp/ip·udp
齐齐大魔王2 天前
Linux-UDP广播机制
linux·udp·智能路由器