前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络即时对战游戏是怎么做到同步运行的?

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

作者头像
李海彬
发布2018-03-23 10:58:21
1.8K0
发布2018-03-23 10:58:21
举报
文章被收录于专栏:Golang语言社区Golang语言社区

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

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

一、集中式:

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

二、分布式:

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

三、分布集中结合:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档