手游下载网

手游下载网

游戏架构-游戏同步方案

admin 87 19

近些年,游戏发展之迅速大家是有目共睹的。尤其是是网络游戏,做网络游戏就避免不了数据,所以数据同步问题,就成为了大家继续解决的核心问题之一。

近几年网络速度的提升也促进了游戏的发展。尤其是网络游戏。开发快速动作游戏,首先要对公网的网络质量数据有详细的了解。这里所说的网速,指的是RTT数据返回一周的毫秒时间,而非每秒传送多少KB/S。下面说一下几种常见的同步方案。

帧间同步法

关于帧间同步有很多实现方式,但是他们的核心都是一个,保证所有客户端的输入都一样,这样的方式被格斗游戏,RTS和足球(FIFA类)等体育和动作游戏大量使用,还有我们熟悉的各大战网平台。这种方式主要是开发便利,同步逻辑直观而受到大家欢迎。

帧锁定算法多用在C/S模型中或者一人做主多人做从的P2P里,它和LOCKSTEP共同存在的问题就是网络慢的玩家会卡到网速快的玩家。(代表的就是魔兽争霸)在这里有的人用TCP协议有的用UDP协议,在网速恒定的情况下并没有太大的区别,甚至TCP的编写代码的方式更简单。当网络速度不恒定的时候就体现出来了UDP的威力,不过关于丢包需要自己处理。编写代码会反锁。

最近两年国内外也涌现了其他一些新的改良方法。比如一客户端先行,当逻辑不一致时就回滚的方式,例如你在游戏里面正跑着,忽然被拉回去了。

关于帧同步的优化方案其实还有很多,比如乐观锁等等。像王者荣耀就是这样,不会导致网络慢的玩家卡住网络快的玩家。

状态同步法

对于逻辑不要精确到帧的游戏而言,允许每个客户的那屏幕上显示的内容不同,只要将他们统一到一个逻辑中即可。

举一个例子例如在RPG攻击分为有锁定的攻击和无锁定攻击,有锁定攻击的时候我向你发射一个法术,不管你怎么跑,法术效果都会追随并打到你,这个时候你会发现法术的运动并不是直线,而是曲线追踪者你就过去了。这叫锁定攻击,无锁定攻击一般是范围攻击,首先播放动画比如挥刀,然后将你的请求发送给服务器,服务器结果回来的时候,动画刚好播放完毕,然后大家一起喷血。

其实状态同步是一种乐观的同步方法,认为大家屏幕上的东西不同没有关系,只要每次操作的结果相同即可,不需要像帧同步一样保证每一帧都相同,因此对网速的要求没有帧同步那样苛刻,偶尔卡顿一下也没有问题。
上面两种情况总体来说你希望游戏的体验更爽快,即时感更强。那么你每秒发送的数据包就越多,每局支持的人数越少越好。如果你既想人多,及时,爽快,就目前而言并没有统一的做法,而且笔者认为至少在广域网里面无法实现。

结果同步法

游戏表面上看起来是动作/RTS游戏,但是没有玩家直接协作和对抗,都是单机游戏,并不需要同步什么东西,服务端只要监测下结果不离谱即可,延迟检测都没关系。基本是PVE,而且无协作。即使是PVP也就是打一下别人的离线数据,和无同步回合制游戏并无本质上的区别。

目前关于网络游戏同步的方案还有很多,大家根据自己的游戏选择最合适的同步算法,为玩家提供更好的体验才是关键。