游戏架构与编程 (游戏架构设计流程)

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

游戏架构版本,游戏架构与编程

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

帧间同步法

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

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

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

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

状态同步法

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

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

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

结果同步法

结果同步往往比较简单,位置即使全部错乱或者延迟很久都没有关系,因为游戏过程完全不在乎位置,只在乎最后的结果,比如《梦幻西游》这样的“回合制 RPG” 游戏,屏幕上的人走到哪里确实无所谓,所有操作都是要点击或者选择菜单来下命令,像这样的游戏背后其实是文字游戏,只是加了一个图形的壳。

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

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

你如果有好的方案 请在评论区留言。