网络即时对战游戏是怎么做到同步运行的?

高实时的互联网游戏设计时都要考虑延时问题,不同类型的游戏会有不同的解决方案。

游戏世界同步,主要分这三种方式:

一、集中式:

即时战略游戏,例如DotA,非常强调游戏世界内各种元素显示的准确性和游戏的公平性。这种游戏采用完全精确的同步方式,整个世界都要完整地同步到每一台加入游戏地电脑。这给你的操控带来了3个方面的延时 (1)你发出指令到服务器收到指令的延时。 (2)服务器将世界同步到你的电脑的延时。 (3)为了让你电脑里显示的游戏世界不会因为网络的不稳定而时快时慢影响显示效果,你的电脑要保留一定的缓冲时间。 所以这类游戏无可避免操作反馈延时,你发出一个移动指令到人物开始移动会有明显的滞后,这个延时等于以上三个环节延时之和。

二、分布式:

实时操控的游戏,例如赛车类、射击类,更强调玩家操作的实时反馈,所以不能使用集中式世界同步。一般这类游戏的操控元素(玩家操控的人物或者赛车)的很多信息都由客户端自行计算处理,并同步到服务器和其他玩家。所以,你在游戏中看到的自己是没有延时的,而其他玩家和游戏元素是有延时的,这意味着每个玩家观察到的游戏世界都不相同。但游戏的输赢必须统一,所以这种同步方式无可避免带来胜负争议(明明我先开枪打中他,为什么反倒是我挂了?),也给了作弊器很大的便利。

三、分布集中结合:

这种方式的本质还是分布式,但玩家操控元素的演算在服务器也有一个副本,并以服务器的副本判定输赢、扣血等关键指标,而客户端的副本用于呈现。其难点在设计很复杂的同步方式让两个副本的分歧尽可能小,不会随时间变得越来越不同:例如移动操作是用鼠标点一个位置,那虽然我的电脑上和服务器上人物起步时间和位置不一致,但最终人物都会走到同一个地点。这方式可以有效抵抗作弊器,兼顾公平和操控实时反馈,但胜负争议依然无法解决,甚至更严重。我玩游戏不多,我明确知道使用这方式的是《暗黑破坏神2》 。

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BestSDK

想用APP创业,那你要明白API的重要性?

每一家初创企业和公司都会有提供给世界的接口。有的接口超级简单,比如Google—你能做的只有搜索;有的复杂一点,比如在Amazon上面买东西—你可以浏览、搜索、...

33290
来自专栏C语言及其他语言

趣味web网页大集结

身边学web和php的有些少啊.....【难受】 但是web网页确实能带来别样的欢乐.... 今天给大家带来几个有趣的网页 经典蓝屏界面 ? 现在你讨厌的蓝屏...

31150
来自专栏前端桃园

如何学习一个框架

昨天我在一个群里有一个人在问,谁会 rxjs?我当时其实还有点好奇,对于 rxjs 我一直觉得很难,前阵子我也一直在研究。

27710
来自专栏zhangdd.com

流量分析常见指标

1)基础分析(PV,IP,UV) Ø 趋势分析:根据选定的时段,提供网站流量数据,通过流量趋势变化形态,为您分析网站访客的访问规律、网站发展状况提供参考。 ...

11210
来自专栏编程

前端开发的中年危机

最近一年前端也在飞速发展着, 很多前端(比如我)感觉有时候就会莫名其妙的冒出各种不明觉厉的概念: redux刚看了一点, 突然不知道哪来的mobx, rxjs...

24170
来自专栏程序人生

Phoenix 1.3,迈向正确的道路

距离 1.2 发布已经有一年多,而 exlirconf 2016 McCord 宣布 1.3 的特性也已过去半年,phoenix 1.3 依旧犹抱琵琶半遮面,迟...

400150
来自专栏web前端教室

web前端不止是JS和CSS,还有诗和远方。谈WEB前端工程化

标题起的有点骚包哈,其实是说,WEB前端的主战场是“前端工程化”。 前端就前端呗,为啥还要加个“工程化”? 很简单,因为前端变复杂了。复杂到必须把一个个网页切成...

25970

如何在一天内建立物联网应用程序

物联网(IoT)的建立是为了解决现实世界中麻烦的问题,而将物联网技术整合到更广泛的信息生态系统中的过程几乎是同等麻烦的。这就是为什么物联网不是您可以在商店(或其...

51940
来自专栏花叔的专栏

为学cocos,和机友做了个重力小游戏

于是,趁着小游戏发布之际,一边学createjs一边发布了个人第一款小游戏:最强坦克,现在每逢周末都会或多或少地迭代一下。

20030
来自专栏SEO

「思考」5个方面解析什么是百度眼中的优质内容

337120

扫码关注云+社区

领取腾讯云代金券