本文发表于程序员刘宇的个人博客,转载请注明来源,博客园同步更新:https://www.cnblogs.com/xiaohutu/p/12402399.html
这几年做了一些网络同步项目,总结一下帧同步的一些东西。
1. 帧同步基本特点
- 所有的逻辑行为运算都在客户端进行,客户端保证彼此之间执行结果的一致性。
- 客户端将自己的所有操作发给服务器,服务器转发。
- 服务器维持一定的逻辑帧率向客户端发包,每次都带上一间隔的所有客户端发来的操作,如果没有就发空帧,附带上客户端需要执行此包的帧数。
- 客户端收到帧数据执行这一逻辑帧的行为,否则等待。
2. 同步性的保证
- 确保需要同步部分逻辑执行次序的一致性,特别关注各种容器的底层结构以及运行过程中对容器的增删改。
- 确保AI、物理引擎等执行结果的一致性,避免因为使用部分游戏引擎的更新特性,导致一些AI计算的时间次序问题。
- 确保数学运算在不同cpu上的的一致性,使用定点数或者浮点数截取等方法计算逻辑。
- 确保随机结果基于次数的一致性,使用次数一致性的随机算法,如梅森旋转算法。
- 确保客户端数据来源的一致性,存储的静态数据以及读取过程需要特别关注。
3. 逻辑画面分离
- 抽离开图像执行逻辑和关键帧执行逻辑的循环结构。
- 逻辑部分可以无画面执行,正确的输出结果。