主程技术分享: 游戏项目帧同步,状态同步如何选

网络游戏开发项目中帧同步,状态同步如何选?

网络游戏的核心技术之一就是玩家的网络同步,主流的网络同步有”帧同步”与”状态同步”。今天我们来分析一下这两种同步模式。同时教大家如何在自己的项目中采用最合适的同步方式。接下来从以下3个方面来阐述:

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

希望能帮助大家掌握帧同步与状态同步原理,并能做出对项目与团队最正确的选择。

状态同步的原理与常用的处理方式

状态同步是在服务器上跑完整的游戏逻辑,包含每个角色在游戏地图上行走,攻击。角色与角色的战斗,都要编写代码实现在服务端。可以理解为是跑在服务端的没有图像渲染的游戏。同时由于多人在线,服务器端接收每个玩家

每个玩家+NPC+怪物都在服务器上有对应的数据对象,并且这么多对象都要处理,而且这些对象为避免线程锁等开销,一般都在一个线程, 所以像MMORPG 每个地图的同时在线的游戏人数是有上限的,上限取决于服务器的机器配置与游戏逻辑的复杂度。比如魔兽世界”一个地图”最多同时在线约3000人左右。有人就会问魔兽世界每天

游戏玩家是要看图像的,不能只看数据在那里跑, 客户端就要根据服务器上的”状态”重现出服务器上当前的游戏画面。如果客户端把服务器上所有的玩家角色都创建并渲染出来, 客户端性能可能达不到,也没有必要,每个玩家都

大家都是根据服务器上的状态来显示画面的,所以不同客户端能”同步”。准确的讲是同步显示的服务器上元素状态。什么是”状态”?一般游戏里面我们把一些关键的信息叫做”状态”, 举一个例子:

角色怪物出生角色怪物的Idle, Walk, Attack, Dead等

接下来我们拿玩家从创建对象, 到待机,到行走,到攻击,回到待机来举例,来看下角色的状态变化以及这个过程中客户端如何同步。

服务器上创建了一个角色对象A,这个角色对象A就会出现在”若干玩家”的视野里(AOI算法),对于这若干玩家而言状态发生了变化,服务器给它们都发送一个角色创建的状态信息含角色的位置,角色的类型,朝向角度,角色状态(Idle)等,这些玩家客户端就把这些角色创建出来。对于角色对象A对应的客户端,服务器要把它视野范围内(AOI)的其它客户端的角色状态发送给它,然后它根据这些状态信息把画面绘制出来。接下来服务器就按照角色状态进行迭代,待机的待机,行走的行走。客户端按照状态也进行迭代,一但状态变化就同步,我们接着角色对象A创建出来的idle状态来分析,那么服务器上角色对象A是Idle其它玩家看它也是Idle。角色对象A发了一个行走的操作给服务器,服务器先判断这个操作的合法性,如果合法,服务器就把角色对象A的状态(位置,旋转,状态等关键指标)+玩家的行走操作(寻路走到目的地dst)一起发送给能看见A玩家的人(能看见A的客户端+包含A自己),关键来了,收到这个状态变化后,每个客户端先重置一下角色数据的状态(位置,旋转,缩放)与服务器同步,在大家都同步到服务器的状态的基础上再做寻路移动操作。接下来角色对象A开始行走了,服务器上要寻路,然后迭代A的行走数据,客户端上的对象A也要寻路,也要再客户端上行走,这个过程可以和服务器失去联系(服务器走服务器的,客户端走客户的端的)。这样角色A就在客户端走起来。行走过程中客户端A发现了一个怪物,点了一下怪物,触发攻击操作,这个时候服务端收到这个客户端A的攻击操作,先判断检查是否合法,如果合法了角色A就要从Walk状态到Attack状态了,这个时候服务端先把服务器上角色A目前的状态(位置,旋转,缩放等)+服务器上角色A的操作一起发给对可见角色A的客

总结一下,客户端根据服务器的状态+后续操作来重现游戏画面,服务器接收玩家操作,独立迭代游戏逻辑,迭代中发现状态变化(玩家操作等决策引起),通知客户端,客户端先同步服务器上的状态,然后基于这个状态再结合操作播放动画。总之服务端迭代服务端的,客户端迭代客户端的,服务器每次状态变化,同步到客户端后再接着播放动画。客户端与服务器上同步的是服务器上的最后的一个状态。

帧同步的原理与常用的处理方式

做单机游戏时,根据客户端的帧率来驱动我们的游戏逻辑,每帧检查玩家有没有操作,如果有操作就进行处理。单机游戏的本质就是基于帧率来进行驱动的。帧同步原理就是把这个帧率在本机的转为由服务器每隔一段时间向客户端发送数据来作为帧来驱动游戏, 同样的服务器的驱动,同样的客户端逻辑代码,每个客户端跑出来的结果就是一致的。

服务端只要负责把每帧采集到的玩家操作,转给所有客户端, 这样客户端根据服务端的帧操作来迭代游戏。客户端的帧率是60左右给玩家的感觉是比较流畅的,服务器以多少的帧率来驱动客户端玩家感觉会是流畅的呢?60FPS是画面的流畅度,服务器同步的是操作,人的反应时间是50~100ms,所以服务器只需要20FPS左右就能够获得非常流畅的操作手感,所以帧同步服务器的帧率一般是每秒15~20FPS左右。

了解帧以后,接下来看如何基于帧同步, 服务器如果确认了每秒20FPS,那么服务器帧的时间间隔就确定了为50ms, 当我们收到一个新的服务器帧的时候,先不着急处理,而是先要回到上一帧的状态(位置,旋转等),然后基于上一帧的操作来使用50ms时间间隔来迭代这帧的结果,再基于当前同步后的状态处理服务器给我们发过来的帧操作,播

哪些游戏适合帧同步,哪些游戏适合状态同步

搞懂了上面的原理,我们来看下哪些游戏适合帧同步,哪些游戏适合状态同步。状态同步基本上适合绝大部分的游戏,包括帧同步擅长的领域用状态同步做也能做的很好。帧同步的局限性就大很多了,接下来我们来分析帧同步的优点与缺点。帧同步与状态同步相比,服务器要简单很多,而且服务器的项目可以高度重用,因为写好一个游戏的服务端帧同步,下一个游戏的服务器基本不用改,所以腾讯推出一些服务端的集成方案就有帧同步的服务器,每个游戏项目都可以用, 做到服务端高度重用。帧同步与状态同步相比,帧同步更平滑,不会有一些峰值,这样导致玩家的手感一直很好,什么叫做峰值,状态同步,突然某个时刻状态变化比较多,同步的数据量大,网络和处理可能会有瞬间的卡顿,而这种可能就影响关键时候的手感,帧同步在这块就更平滑。每次只要同步玩家的操作,数据包更小。所以一些强调操作手感的游戏是可以用帧同步来做的。帧同步每一个玩家对应的角色都要在客户端计算迭代,而不像状态同步只迭代视野范围内的,所以帧同步对客户端的运算量会变大,同时帧同步不能适用在同时3000人一起玩的游戏,因为3000个角色都要在客户端,每帧都同时迭代计算,客户端性能达不到。所有MMORPG, 这种游戏

分析完后我们得到一条结论: 一局时间不长的游戏,每一局不允许玩家中途进来的游戏,每一局的人数是少量固定的(5vs5, 10vs10),对客户端计算不敏感,这种游戏可以采用帧同步。帧同步能获得很好的操作手感,降低服务端的开发难度,如果没有服务端的团队,还可以用腾讯的帧同步服务器。

今天的分析就到这里了,主页有一个小组,里面有萌新,有大佬 还有一个比较好的游戏教程分享,详细的讲解了帧同步的20个流程详解与状态同步的实战解密等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过人工智能和自动化提高供应链弹性?

全球供应链中的数字化转型已经引起了广泛关注,尽管在过去的十年中,这一话题被广泛讨论,但许多公司仍然对如何实现这一不明确的目标感到困惑。人们普遍认识到这种转变的重要性,而新冠疫情及其带来的巨大影响也为行业向数字化转型方…

uniapp条形码实现

条形码在实际应用场景是经常可见的。 这里教大家如何集成uniapp条形码。条形码依赖类库JsBarcode. 下载JsBarcode源码,对CanvasRenderer进行了改进兼容uniapp。 import merge from "../help/merge.js"; import {calculateEncodingAttributes, getTotal…

韦东山老师 RTOS 入门课程(一)RTOS 介绍,熟悉裸机的汇编逻辑

韦东山老师 RTOS 入门课程 课程链接:韦东山直播公开课:RTOS实战项目之实现多任务系统 第1节:裸机程序框架和缺陷_哔哩哔哩_bilibili RTOS 介绍 裸机:固定顺序执行。 中断:可以一直专心做循环里的事情,直…

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/

IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/ Idea下载官网一键直达: 官网一键直达

01、Cannot resolve MVC View ‘xxxxx前端页面‘

Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码&#xff1a;前端这里引入了 thymeleaf 模板 解决&#xff1a; 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…

阿里云ECS服务器安装PostgreSQL

1. 概述 PostgreSQL是一个功能强大的开源数据库&#xff0c;它支持丰富的数据类型和自定义类型&#xff0c;其提供了丰富的接口&#xff0c;可以自行扩展其功能&#xff0c;支持使用流行的编程语言编写自定义函数 PostgreSQL数据库有如下优势&#xff1a; PostgreSQL数据库时…

【ThingJS | 3D可视化】开发框架,一站式数字孪生

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; 数字孪生 | 3D可视化框架 开发工具&#xff1a;ThingJS在线开发工具 ThingJs 低代码开发 ThingJs 低代码开发注意点场景效果配置层级层级常用API实例化 Thing&#xff0c;加载场景load 加载函数ThingJs 层级关系图查找层…

山西电力市场日前价格预测【2023-08-24】

日前价格预测 预测明日&#xff08;2023-08-24&#xff09;山西电力市场全天平均日前电价为319.98元/MWh。其中&#xff0c;最高日前电价为370.78元/MWh&#xff0c;预计出现在19: 30。最低日前电价为272.42元/MWh&#xff0c;预计出现在12: 45。 价差方向预测 1&#xff1a; 实…

港联证券|燃气板块午后走高,美能能源涨停,水发燃气大幅拉升

燃气板块21日午后快速拉升&#xff0c;到发稿&#xff0c;美能动力涨停&#xff0c;水发燃气涨超7%&#xff0c;蓝天燃气涨超5%&#xff0c;贵州燃气涨逾4%。 消息面上&#xff0c;受澳大利亚LNG工厂罢工忧虑影响&#xff0c;欧洲基准天然气价格一度大涨18%。 有报导称&#x…

记录:ubuntu20.04+ORB_SLAM2_with_pointcloud_map+ROS noetic

由于相机实时在线运行需要ROS&#xff0c;但Ubuntu22.04只支持ROS2&#xff0c;于是重装Ubuntu20.04。上一篇文章跑通的是官方版本的ORB_SLAM2&#xff0c;不支持点云显示。高翔修改版本支持RGB-D相机的点云显示功能。 高翔修改版本ORB_SLAM2&#xff1a;https://github.com/ga…

linux 安装 kibana

首先下载 kibana https://www.elastic.co/cn/downloads/kibana 然后上传到linux /usr/local 目录下解压安装 修改config/kibana.yml 配置文件&#xff0c;将elasticsearch.hosts 然后再nginx 中做一个端口映射&#xff0c;实现在浏览器中输入后xxxx:5602 nginx 可以将请求转发…

【LeetCode】224. 基本计算器

224. 基本计算器&#xff08;困难&#xff09; 方法&#xff1a;双栈解法 思路 我们可以使用两个栈 nums 和 ops 。 nums &#xff1a; 存放所有的数字ops &#xff1a;存放所有的数字以外的操作&#xff0c;/- 也看做是一种操作 然后从前往后做&#xff0c;对遍历到的字符做…

Docker搭建Redis集群

Docker搭建Redis集群 一 、搭建Redis集群的优点 先说说单个redis的缺点&#xff1a; 1、单个redis具有不稳定性。当redis服务死机了或者redis服务被kill掉了&#xff0c;就没有可用的redis服务了。 2、单个redis的读写能力是有限的。 再根据单个redis服务的缺点谈谈redis集群…

借助frp的xtcp+danted代理打通两边局域网p2p方式访问

最终效果 实现C内网所有设备借助c1内网代理访问B内网所有服务器 配置公网服务端A frps 配置frps.ini [common] # 绑定frp穿透使用的端口 bind_port 7000 # 使用token认证 authentication_method token token xxxx./frps -c frps.ini启动 配置service自启(可选) /etc/…

计算机视觉:比SAM快50倍的分割一切视觉模型FastSAM

目录 引言 1 FastSAM介绍 1.1 FastSAM诞生 1.2 模型算法 1.3 实验结果 2 FastSAM运行环境构建 2.1 conda环境构建 2.2 运行环境安装 2.3 模型下载 3 FastSAM运行 3.1 命令行运行 3.1.1 Everything mode 3.1.2 Text prompt 3.1.3 Box prompt (xywh) 3.1.4 Points p…

网络安全--wazuh环境配置及漏洞复现

目录 一、wazuh配置 二、wazuh案例复现 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署&#xff0c;傻瓜式操作 1.3通过账号&#xff1a;wazuh-user&#xff0c;密码&#xff1a;wazuh进入wazuh…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理范式无损分解 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0…

Day3: 前端路由(基础篇)

❝ 「目标」: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。 ❞ ❝ 「主要面向群体&#xff1a;」前端开发工程师&#xff08;初、中、高级&#xff09;、应届、转行、培训等同学 ❞ Day3-今日话题 想必大家经常会在面试中或者工作…

AD域组策略开机脚本客户端不执行:解决方法

本例实现的计算机开机重置本地管理员的密码 1、创建组策略 2、在AD域中添加脚本 3、注意脚本的路径&#xff1a;就是打开 Show Files 目录 4、本例建了2个脚本&#xff0c;一个是用来测试的 &#xff08;1&#xff09;CreateFile.ps1 文件&#xff1a;用来在D盘创建一个 file…

Linux权限

Linux中一切皆文件&#xff0c;那么文件就应该有相对于的类型&#xff0c;而在Linux当中&#xff0c;类型不是直接看后缀来决定的。 -普通文件、文本、可执行、归档文件等d目录b块设备、block、磁盘c字符设备、键盘、显示器p管道文件s网络socket文件l链接文件 link 然后后面的九…