帧同步进阶

帧同步储备知识点

帧同步进阶
网络协议:TCP或者UDP,一般是采用可靠的UDP。
ProtoBuf:谷歌制定的一种数据传输与存储格式:
随机数种子:游戏中难免会出现一些产生随机数的场景,但是如果是帧同步的话,就要保证各个客户端生成的随机数是一致的,否则就会出现数据不同的情况。但是要实现这样一个生成随机数的需求,就需要使用随机数种子,而这实际上并不算是真正的随机。
帧:帧可以是通常意义上的一个帧,也就是一个图片里的信息,也可以表达是一个短暂的时间片。在帧同步机制中,玩家并不是操作一次就上传一次操作,而是积攒一个事件片的操作打包发给服务器,然后服务器返回,客户端表现。

为什么使用UDP做帧同步

1,帧同步传输频率高,需要保证传输速度
2,两种“长连接”传输协议比较
帧同步进阶
UDP实际上是无连接的,而TCP是面向连接的。客户端使用UDP技术像服务器端发送消息,只需要知道地址和IP端口。
登陆游戏、匹配游戏、寻找房间可以用TCP来做,在战场同步中使用UDP。

帧同步同步什么?

同步的是玩家操作:(至少包含如下两块内容)
1,帧序列:产生的每一帧都要加一个序号,客户端产生一帧,服务器记录一帧、然后返回、客户端播放一帧。目的就是让服务器知道目前所有的客户端,假如一个房间有10个人,这10个人的客户端都像服务器上传了第1帧,这个游戏才可以被开始,并且一帧都不能漏,因为客户端是严格按照帧来驱动的。

2,玩家操作信息:
(1)battleID 战场号、房间号 : 服务器端实际上是维护着很多房间的,因此必须要区分战场号、房间号,这样服务器才能正确的转发给正确的玩家。
(2)move 玩家摇杆方向 :玩家的操作,点击了哪些,往哪个方向走的。
如果没有操作是否也要上传帧呢?当然是要的,因为帧同步要求每一帧。

帧频率

收集一帧操作的时间片。客户端在一个时间结尾收集玩家的操作发给服务端。
所以帧频率不能太大,因为只发最后一个操作,玩家虽然在移动摇杆,但是人物没有马上跟着动,并不是收集所有操作放到一个数组里,然后一起发过去。
帧频率也不能太小,因为这样就没有多余的帧去做解析处理,网络同步下来必然比客户端要慢。

因此要保证帧频率在一个合适的频率。如果是一个低配手机,它的帧率必须要达到网络同步所需的帧频率,如果配置过低,那么就需要降低材质,降低其他方面的性能去提升帧率,这样才可以继续游戏。

帧同步当中TCP的使用

帧同步进阶