即刻App年轻人的同好社区
下载
App内打开
季晨曦
4年前
昨天公司又做了一轮技术分享,做的是关于帧同步的优化,听完之后对象很同步技术又有了新的理解,也分享一下。因为以前做过简单的,所以问了几个技术难点,最后因为提问题特别多,多送了我一张当当礼品卡🤣,赶紧买书!

1. 追帧的buffer,buffer也就是缓存的帧数据,应该是根据网络延迟的好坏来动态的修改buffer的长度,如果是网络良好,则来一帧数据,同步一帧,如果网络差,则允许有3帧的延迟,超过3帧再追帧。buffer保存在对象池中。

2. 网络差的时候,应该要做预测,把世界的快照(状态)保存起来,和帧数据一起发送给服务器。当预测错的时候,让世界回到快照的状态,再从这一时刻的帧开始同步。

3. 快照有些类似状态同步,但不同的是,状态同步会实时去同步状态,而帧同步中,不应该实时同步快照,而且每隔一段时间收集一次快照发给服务器。

4. 断线重连,有了快照,在咱家断线重连的时候,可以直接从最近的快照开始追帧,追帧的速度可以随着越接近服务器的当前帧而放慢追帧的速度,即不再一个渲染帧当中追多个帧,这样可以得到逐渐平滑达到战斗时刻的画面

5. 为了防止有热更代码不同导致帧同步的画面表现不一致的情况,在测试期,应该限定对战匹配的玩家的版本号一样。

6. 为了能更好的调试观察帧同步的数据是否一致,可以把每一帧的帧数据生成HashCode,观察是否一致只需要对比哈希值即可,一旦出现不一致,则把这一帧附近的20个帧数据记录到日志中。

7. 为了能复现游戏中出现的画面不一致的情况,要把录像功能附加进游戏中,每局的对战都记录下来,方便复现为何出现不一致的情况。

8. 缓存玩家的操作,当某一帧玩家出现了卡顿的现象,应该要把玩家的操作缓存起来,否则直接丢掉会导致他在卡顿时没有任何操作,如同活靶子。
232

来自圈子

圈子图片

JitHub程序员

389213人已经加入