快速多人游戏(1) - 介绍
原文地址:Fast-Paced Multiplayer (Part I): Introduction
简介
这是一系列的关于快速多人游戏的技术和算法的文章的第一篇,如果你对于多人游戏背后的技术非常熟悉,那么你可以直接跳到下一篇 - 因为接下来的内容只是介绍性质的。
每一种游戏的开发技术都有各自的难点,多人游戏则给游戏开发添加了一系列要处理的问题,有趣的是,其中最核心的问题是让人看上去自然和物理模拟。
关于作弊的问题
所有的一切的起源都是作弊。
作为一个游戏开发者,你一般不会去担心有人在你的单人游戏中去作弊 - 因为他的行为不会给其他人带来影响,一个作弊的玩家可能并不会按你设计的套路去进行游戏,但是游戏是他的,他们有权利去选择怎么去玩。
多人游戏则不同。在任何的有竞争关系的游戏中,一个作弊玩家不仅仅给自己带来了更好的体验,他也毁了其他的玩家的游戏。作为开发者,你可能希望避免出现这样的情况,因为这会让玩家流失。
为了防止作弊,有很多事可以去做,但是最重要最(可能也是唯一有意义的)的事非常简单:不要相信玩家。就做最坏的打算:所有玩家都想要作弊。
权威服务器和静默客户端
有一个非常简单的解决方案 - 你将游戏中所有的逻辑都放在你控制的服务器来做,而客户端只是游戏的旁观者,换句话说,你游戏的客户端把输入(按键,命令)发送到服务器,服务器来运行这个游戏,然后你把结果返回给客户端。这就是常说的权威服务器,因为游戏世界中发生的一切都在服务器中进行。
当然,你的服务器还是可能被发现漏洞,但是这就不属于我们要谈论的范围了。使用权威服务器可以防止很多的漏洞,比如,服务器不信任玩家的在客户端的血量,客户端想要作弊,把本地的血量调到10000%,但服务器知道血量只有10% - 当玩家被攻击的时候它还是会死掉,不管客户端的血量是多少。
服务器同样不信任玩家的位置。你可能会这样做,在这一秒你告诉服务器“我在(10,10)”,然而下一秒你告诉服务器“我在(20,10)”,这样就可以穿过一堵墙或者超快速的移动。但是,权威服务器知道玩家在(10,10),当客户端告知服务器他要往右动一格的时候,客户端的位置会由服务器来处理,将位置更新为(11,10),然后告知玩家“你在(11,10)”。如下图所示:
一个简单的CS交互
小结:游戏的状态由服务器独自管理。客户端将动作发送给服务器,服务器来周期性地更新游戏状态,然后将新的游戏状态发送给客户端,客户端对结果进行渲染呈现。
处理网络
上面的处理方式对于回合制的游戏非常适合,比如策略游戏或者棋牌类的游戏。它在LAN中也能工作的很好,在这种情况下,通信是瞬发的。但是对于一些对实时性要求很高的游戏,而且在internet环境中,这种解决方案就会出问题了。
下面来谈一些物理的问题。假如你在旧金山,连接了一个在纽约的服务器,两地相距4000km或者2500英里(大概是里斯本到莫斯科的距离)。任何东西都不能比光快吧,即使是Internet上的数据(数据传播的底层可能是光的脉冲,线缆中的电子,或者是电磁波),光传播的速度大概是300000km/s,所以传播4000km需要13ms。
这听起来可能很快,但这实际是最乐观的情况 - 假设数据传播的速度是光速,沿着直线传播,这些通常是不可能的。在真实情况下,数据是由无数个路由经过一系列的跳(在计算机网络里的属于叫做hops)进行传播的,而且大部分的传播速度都达不到光速;路由在传播的时候也会产生一些延迟,因为包必须被打包,检查和分发。
所以保险起见,我们假设数据从客户端到服务器需要50ms,这接近最好的场景了 - 当你在纽约而服务器在东京呢?假设网络因为什么原因发生阻塞了呢?100ms,200ms,500ms的延迟也是有可能的。
回到我们的例子,你的客户端将输入“我按下了向右的按键”发给服务器,服务器在50ms之后获取了数据,现在假设服务器能够立即响应并且将结果返回,那么客户端在50ms之后获得新的游戏状态“你现在在(1,0)”。
从你的视角来看,情况是这样的:你按下了向右的按键,但是什么事都没发生,直到一百年后你的角色向右移动了一格。这样的延迟是显而易见的,当然延迟半秒不仅仅是显而易见,它让整个游戏没法玩了。
总结
通过网络连接的多人游戏是超级有趣的,但是引入了一系列的难题和挑战。权威服务器架构能够防止很多的作弊,但是直接用这种方法会让游戏的响应变得迟缓。
在下面的文章,我们会介绍我们怎么围绕权威服务器来建立一个系统,能够最小的减少玩家的延迟体验,就像在玩单机游戏一样顺畅。
快速多人游戏(1) - 介绍相关推荐
- 快速多人游戏(4) - 爆头!(AKA延迟补偿)
原文链接:Fast-Paced Multiplayer (Part IV): Headshot! (AKA Lag Compensation) 介绍 从上一篇文章到现在已经过了很久很久了(整整两年!哦 ...
- 拨测工具_您可以拨多少钱? 快速简单地介绍有用的工具。
拨测工具 by Miguel Bustamante 通过Miguel Bustamante 您可以卷曲多少? 快速简单地介绍有用的工具. (How much can you cURL? A quick ...
- ArcGIS快速制图插件介绍
ArcGIS快速制图插件介绍 By 李远祥 作品背景 <快速制图插件增强版>在原有的<快速制图插件>基础上,加入植被乱序填充.生成立体楼快.等高线增强显示.一键导出地图和数据. ...
- tera服务器不显示,tera无法登陆怎么解决_tera无法登陆的快速解决方法介绍
tera无法登陆有哪些解决办法?下面小编为大家详细介绍. 一.帐号或密码错误 1.症状: 2.登陆器提示账号或密码错误. 3.原因: 4.未使用正确的账号和密码进行登陆. 解决方法 请查看您是否使用正 ...
- etabs数据_ETABS 快速建模技巧介绍.pdf
结构分析与设计软件ETABS 知识选讲(一) ETABS 快速建模技巧介绍 沈万湘 李立 北京金土木软件技术有限公司 使用结构分析与设计软件时,建立分析 安装目录下的Default.edb 文件中的信 ...
- fastboot快速引导模式 介绍
fastboot 快速引导模式 介绍 Fastboot 是一种在 Android 设备上启动引导程序的方式.通过 Fastboot,您可以在设备的引导分区中刷入镜像文件.格式化分区.解锁引导加载程序等 ...
- linux locate 快速查找命令介绍
时间过得好快,一转眼一年又快到过年了,很久没有和大家分享了,工作实在太忙了. 使用linux的人都会知道find查找命令. 下面有关于find的使用说明 :linux 查找命令大全. 下面给大家介绍一 ...
- 3DMAX快速入门 界面介绍【上】
对3D软件感兴趣的你在打开3Dmax的那一刻,有没有傻眼?密密麻麻的格子让人看得眼花缭乱,为了避免你一打开就把软件关掉,从此就关上了3d这一款赚钱软件的窗户. 小锤就来和你介绍一下3dmax,让你对于 ...
- NW(New World)快速开发平台介绍(完整的中小型管理系统解决方案)
在公司做了3年多的web平台开发,自己(和同事)总结了一套快速开发平台,定位于快速开发中小型的管理系统.NW开发平台是一个完整的解决方案,包括前端组件.权限.事务.dao.报表.vo生成器.eclip ...
最新文章
- next_permutation函数
- linux操作系统分析实验—基于mykernel的时间片轮转多道程序实现与分析
- 高级编程学习笔记day01(知识点篇)
- printf 规定数据输出方式
- Nginx完美解决前后端分离端口号不同导致的跨域问题
- table内容保存到Excel中
- 是否采用SD-WAN?你需要先考虑以下问题
- 将2^n (n=1000000) 转化为10进制输出
- 必备的海外贸易沟通工具 - intbell使用教程
- 1.3 n-gram平滑算法:Good-Turning、拉普拉斯平滑
- 2019/12/9 K60单片机学习
- 仿9GAG制作过程(五)
- C程序设计第五版谭浩强课后答案 第八章习题答案
- 历史影像高清晰历史卫星影像
- 于树莓派安装Ubuntu系统
- linux查看服务器网络延迟,ECS Linux下的qperf测量网络带宽和延迟的具体步骤
- 系统集成项目管理工程师英语题翻译
- 华为、联想:外媒眼中的“中国制造”
- PL3368C、PL3368CE
- 你必须掌握的,快速幂算法
热门文章
- 电脑怎么转换图片分辨率?照片如何看分辨率?
- java正则表达式校验手机号,电话号码,邮箱
- 家里没宽带的朋友,不用发愁了
- 一家个人计算机制造商 有一万个备份,2014年职称计算机考试Windowsxp冲刺试题单选题及答案...
- 正则表达式--大集合
- 例题8-13:环形跑道
- 知乎不能改用户名吗_知乎上改了用户名 知乎不能改用户名吗
- assert定义和用法
- stackedplot 函数_【matlab 基础篇 03】一文带你全面了解 plot 绘图函数的使用(超详细+图文并茂)...
- 将Windows 11系统默认IP地址修改为静态IP,并成功连接上网