| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 大型多人在线游戏的开发中,如何做到每个玩家动作的实时同步的? -> 正文阅读 |
|
[网络协议]大型多人在线游戏的开发中,如何做到每个玩家动作的实时同步的? |
游戏开发中,有两种主要的同步模式,一种是状态同步, 一种是帧同步, 这两种同步模式是完全不一样的。 接下来我们来分别的分析一下他们同步的原理。 先看状态同步,服务器上跑所有的游戏逻辑(没有图像,动画, 只有数据), 所有的结果都由服务器游戏逻辑计算出来, 比如玩家A打死了一个怪,服务器上的游戏逻辑判定玩家A打死了一个怪,才会把这个消息广播给对这个事件感兴趣的玩家(AOI),收到事件的玩家,才会播放怪死亡的动画。服务器上的逻辑,是靠玩家发送过来的操作来驱动的。比如,玩家A放了一个大招, 玩家的客户端,不会马上放大招,而是会把这个操作发送给服务器,服务器验证玩家A能否发大招(蓝是否够,是否在buff冷冻期等),如果A能发大招,服务器就发一个大招,然后把事件广播给对这个玩家A感兴趣的客户端和玩家A自己,这样就看到玩家A发了一个大招了(播放动画)。至于这个大招照成的伤害,服务器会把状态同步给客户端,客户端根据服务器的状态播放动画就可以了。状态同步的几个核心技术点: (1) 服务器上跑游戏逻辑; (2)玩家的操作需要验证; (3)找出对玩家A操作感兴趣的玩家来节约带宽(AOI) (4)服务器上状态改变了,发消息给客户端,客户端马上同步到服务器上的状态; 视频教程:状态同步详解 再来看帧同步,你可以把帧同步想象成写单机游戏, 同一个游戏里面的两个游戏手柄,玩家A,玩家B各控制一个游戏手柄。游戏引擎以一个帧率来采集玩家的操作,把玩家的操作,输入游戏代码逻辑,这样驱动游戏角色的处理和游戏向前推进。同步的理论就是: 同样的输入 + 同样的代码 得到同样的结果。好接下来,我们就把两个玩家分开,不是连在机器上的两个游戏手柄,而是把这两个游戏手柄用网络连接起来,这样,还是能符合 同样的输入+同样的代码得同样得画面。本地单机游戏得时候,游戏引擎是以帧率来采集操作,而变成网络后,就是由服务器来每隔一段时间触发一帧, 时间间隔用来收集玩家的操作,等帧时间一到,就把采集到的操作发送给同局游戏的所有的客户端。所有的客户端就会接收到这个操作,客户端就计算,这样大家看到的画面都是一致的, 服务器又继续采集等待客户端发过来的操作,直到下一帧触发。 帧同步的难点: (1) 同样的输入 + 同样的代码 = 同样的结果,有些不同机器,浮点数计算,误差,会导致不同结果。 (2) 游戏手感完全取决于转发操作的流畅程度,网络波动,TCP会卡住后面的数据包,影响手感,一般采用UDP, 同时设计的时候,克服UDP的缺点丢包时序等,需要系统的综合设计。 (3) 帧预测与结果同步,这块不难,但是很多小伙伴想不明白。 视频教程:王者荣耀帧同步详解 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:29:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |