欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

游戏 帧同步 实现

程序员文章站 2022-03-16 21:37:17
...

首先简单讲一下帧同步的原理。帧同步是同一场战斗中的各个玩家的操作(比如移动摇杆、点击释放技能等)不立即在客服端执行,而是先上报到服务器。服务器收集并合并所有玩家的操作(必要时进行校验等控制),下发给所有客服端,客户端收到之后再执行。

只要各个客户端的代码(版本)一致,并且需要用到的随机数也进行同步,那么所有客服端运行出来的表现结果是一致的。大部分moba类游戏,例如王者荣耀,都是使用帧同步。帧同步适用于对同步要求比较高(格斗竞技类游戏)、一场战斗内玩家不算多(因为要同步所有玩家的操作,moba类游戏一般就10个人)的场景。

我们的手游有组队PVE、排位赛PVP,有强烈的需求使用帧同步。帧同步也是我们这个项目遇到的难点,走了不少弯路。
首先是通讯协议的选择,我们开发了UDP版、TCP版、还用过第三方的“可靠”UDP,最终用了自己UDP版。还有刚开始和状态同步混用,同步了血量等信息,导致不同步难以调试等。

并且帧同步细节也很多,比如怪物AI挂靠、玩家网络不好的情况下追帧处理、断线重连、以及有玩家掉线转AI的处理等。

版权原因,示例代码就不贴了

以上便是帧同步服务器的简版核心代码实现了。当然还有一些非重点逻辑没有在上面代码中体现出来。欢迎大家讨论。

相关标签: 游戏 帧同步