|
pc2g,电脑好游戏
本文转载自https://blog.csdn.net/yhhwatl/article/details/72843369
作为一个程序员,你有没有想象过多人游戏是如何实现的?
在外行人看来游戏很神奇:两个或者更多的玩家在网络上分享共同的经历,就像他们真实的存在于相同的虚拟的世界一样。游戏看起来犹如一个巨大的魔术,奇妙而又刺激,但作为一个开发人员我们知道,真实的情况和我们所看到的并不一样,那只是一种错觉。你感受到的共享现实,实际上是在那个时刻内,由你自己的独特视角和位置所感知的近似情况。
1 Peer-to-Peer 帧同步
最初的游戏是通过peer-to-peer来联网的,每个计算机通过网状拓扑的结构的彼此连接并交换信息。你仍然可以看到这种模型存在于RTS游戏中,而且基于某些原因它还很有趣,也许是因为它是大多数人认为游戏网络工作方式的第一种方式。
处理游戏信息的基本思想就是把游戏的数据抽象并转换成一系列命令消息,当处理每个转换的时候就直接演变为游戏的状态。比如:移动单位、攻击物体、建造建筑。这一切都需要在线的每个玩家机器,从一个初始化命令开始之后,都运行完全相同的命令和转换数据。
当然了,这只是一个过于简单的解释,同时也隐去了很多细节,不过我们通过这个基本的思路可以知道RTS游戏的网络是如何工作的。如果你想知道更多网络模型,请点击:1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond.
这些看起来是如此简单和优雅,但不幸的它们有几个因素限制者我们。
第一个限制,要保证游戏状态完全确定一致的是异常困难,特别是保持每台机器上每个转换输出都保持相同。比如,一个单位在两台机器上有略微不同的路径,在一台机器上早一些到达并开始了战斗,结果反败为胜,而在另一台机器上,由于稍微晚一些到达而失败。就像一只蝴蝶扇动了翅膀,然后在世界的另一边导致了飓风的出现,随着时间的推移,一个微小的区别就会导致两边完全的不同步。
第二个限制,为了保证游戏的所有玩家输出一致,这就需要等到所有玩家的当前回合数据都到达之后才可以模拟播放这一回合动作。这就意味着游戏中的每一个玩家都需要等待网络延迟最高的那个玩家。RTS游戏通常代表性地通过立即提供音频反馈与(或是)播放吟唱(过渡)动画来掩盖这段延迟,但是最终真正影响游戏的动作要在这段延迟过去之后才能进行。
第三个限制,因为游戏中状态改变的同步是通过发送命令信息来同步的。所以为了游戏中玩家状态都一致,需要所有的玩家都要从相同的初始状态来开始游戏。这意味着每个玩家必须在开始游戏之前先加入房间然后一起开始游戏,尽管理论上也可以支持让某些玩家晚些加入游戏,但是在一场进行中的游戏中获得一个完全确定的起始点的难度相当大,所以这种情况并不常见。
尽管有这些因素限制困扰者我们,不过这个模型还是很适合RTS游戏的,并且它仍然存在于今天的游戏当中,例如“Command and Conquer”、“Age of Empires”与“Starcraft”等。原因就是在RTS游戏中,里面包含了上千多的单位,这些单位都有自己的状态需要同步,而且他们数据量都太大了,很难用来在玩家之间交换。别无选择,我们只能通过这些游戏状态改变的命令来同步。
所以以上这些就是 peer-to-peer 帧同步的网路游戏模型的介绍了,对于其他类型的游戏,最先进的技术已经开始出现了。让我们现在从Doom, Quake 以及 Unreal经典游戏中开始一起观察动作游戏的技术演化。 |
|