Games104——网络游戏的进阶架构

这里写目录标题

  • 前言
  • 位移移动
    • 插值
      • 内插(Interpolation)
      • 外插(Extrapolation)
  • 命中判定
    • Hit Registration
      • 在客户端去判定
    • 在服务器端去判定
    • 延迟补偿
    • 掩体问题
      • 躲进掩体
      • 走出掩体
    • 技能前摇
    • 本地暴击效果
  • 基础MMO框架
    • 分布式架构
      • 一致性哈希
      • 服务管理
  • 带宽优化
    • AOI
      • 画格子
      • 十字链表
      • PVS
  • 反作弊
    • 查内存Obfuscation Memory
    • 确认本地文件哈希值
    • 网络包进行加密
    • 防范软件注入作弊
    • 防范AI作弊
  • 构建可扩展的游戏世界

前言

在这里插入图片描述

位移移动

插值

在这里插入图片描述
内插适用于玩家会突然瞬移加速的情况,相对比较稳定(FPS,MOBA)
外插适用于整个运动符合物理学规律的情况,预测他的速度是比较准确的
游戏内通常会都使用,人物使用内插,载具使用外插

内插(Interpolation)

会加剧延迟,对高速移动的游戏应用是会产生偏差,尤其涉及到玩家碰撞的情况下

外插(Extrapolation)

考虑信息在传播时的延迟,预判对方的行动
PVB
不会看到物体的位置瞬间改变,而是逐步的变化
在这里插入图片描述
在这里插入图片描述
外插值的问题,会导致碰撞的两个物体相互穿到一起,物理引擎会将他们弹飞
解决:
当检测到两个物体重叠了就会将位置控制器转换到物理来控制,然后再转回去
在这里插入图片描述

命中判定

如何判定敌人的距离,怎么判断是否命中他?
在这里插入图片描述

Hit Registration

在不确定的网络环境下有无命中目标没有一个确定的解

在这里插入图片描述

在客户端去判定

符合人的直觉,高效,精确,手感好,但不安全,一旦客户端被破解就可以作弊
开枪瞬间发出一条射线,只要敌人在射线上则判定为被击中
在这里插入图片描述
服务器会对这个结果进行检验
在这里插入图片描述
客户端发送包含完整射线信息的碰撞事件到服务器
(StartPoint、HitPoint和HitObject)
验证StartPoint是否真的足够接近射击者
验证HitPoint是否真的属于HitOject
从StartPoint和HitPoint投射光线,确保路径上没有障碍物。

在服务器端去判定

会因为网络延迟造成误差,很难打中正在运动的物体
在这里插入图片描述

延迟补偿

猜测在每一个开枪者开枪的瞬间是什么情况
前提是要对目前的情况做一个快照,从而找到过去的情况
如果客户端进行攻击(如断网)就可以无视,防止作弊
在这里插入图片描述
在这里插入图片描述

掩体问题

躲进掩体

如果躲到掩体后还是被打死了
因为延迟的问题,被击中人已经躲进掩体,但开枪人视角里被击中人没有躲进掩体,服务器端以开枪人的世界为准,所以会出现这种情况

走出掩体

走出掩体瞄准敌人时,尽管狙击手已经走出掩体,会因为网络延迟的原因,敌人还没看到射击手走出掩体时就被击毙

技能前摇

能够给网络同步争取时间
在这里插入图片描述

本地暴击效果

在本地检测到命中时播放特效,但结算还是以服务器的计算为准,观感上会变好
在这里插入图片描述

基础MMO框架

在这里插入图片描述

  • Link层:负责玩家登录和拦截恶意攻击
  • Lobby:大厅,一个特殊的游戏模式,作为一个缓冲池
  • Character Server:管理计算玩家的信息
  • 交易系统:要保证数据的安全性足够高,全部都可以RollBack
  • 社交系统:玩家之间的交流,邮件
  • Matching:匹配同类型的玩家(玩家的段位,网络延迟相似)
  • 数据的存储:关系数据库,非关系数据库(速度更快,游戏里很多GameState,Loging数据都使用了这个数据库),内存数据库
    当玩家过多时服务器承载不了怎么办

分布式架构

在这里插入图片描述
解决附载均衡
在这里插入图片描述

一致性哈希

使用哈希算法把用户分配到服务器上
在这里插入图片描述

服务管理

在这里插入图片描述
注册唯一标识后可以随时检查服务状态并给所有观察者发送信息

带宽优化

计算带宽
在这里插入图片描述
数据压缩
将浮点数转换为定点数记录,有时为了配合这个算法还会对地图进行分割,很高效,有时能将数据压缩到一半以上
在这里插入图片描述

AOI

以自己为中心只关注距离自己一段距离内的情况
在这里插入图片描述

画格子

空间换时间,将空间划分为格子,当物体在玩家的范围内时将其加入观察列表
在这里插入图片描述

十字链表

将所有物体的x,y轴分别排序,如果该物体在xy轴的位置都与玩家观测的范围相交,则说明在观察范围内
在这里插入图片描述

PVS

根据目前玩家的位置设置潜在的可视范围,其他的位置不关注
在这里插入图片描述
根据引用主体的远近去调整信息同步的频率

反作弊

查内存Obfuscation Memory

对单机游戏比较有用

  • 把客户端加密
  • 内存混淆,把高度敏感的数据在内存中进行加密,只有读写的时候解除

确认本地文件哈希值

客户端检测本地文件的哈希值和服务器端的是否相同,如果篡改了直接将玩家下线

网络包进行加密

在这里插入图片描述
非对称加密
客户端只有一个公钥,服务器端有一个私钥,客户端的公钥被破解了也无法获取到信息,因为没有私钥

防范软件注入作弊

扫描内存中的文件签名,检查是否被修改过,检查到就进行报警

防范AI作弊

根据用户大数据模型进行比较检测是否作弊
在这里插入图片描述

构建可扩展的游戏世界

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025年01月27日Github流行趋势

项目名称:onlook项目地址url:https://github.com/onlook-dev/onlook项目语言:TypeScript历史star数:5340今日star数:211项目维护者:Kitenite, drfarrell, iNerdStack, abhiroopc84, apps/dependabot项目简介…

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …

[SAP ABAP] 静态断点的使用

在 ABAP 编程环境中,静态断点通过关键字BREAK-POINT实现,当程序执行到这一语句时,会触发调试器中断程序的运行,允许开发人员检查当前状态并逐步跟踪后续代码逻辑 通常情况下,在代码的关键位置插入静态断点可以帮助开发…

从TinyZero的数据与源码来理解DeepSeek-R1-Zero的强化学习训练过程

1. 引入 TinyZero(参考1)是伯克利的博士生复现DeepSeek-R1-Zero的代码参仓库,他使用veRL来运行RL强化学习方法,对qwen2.5的0.5B、1.5B、3B等模型进行训练,在一个数字游戏数据集上,达到了较好的推理效果。 …

深度卷积神经网络实战无人机视角目标识别

本文采用深度卷积神经网络作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化,该数据集包含丰富的无人…

初级数据结构:栈和队列

一、栈 (一)、栈的定义 栈是一种遵循后进先出(LIFO,Last In First Out)原则的数据结构。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈操作是将元素添加到栈顶,这一过程中&#xf…

数据结构 前缀中缀后缀

目录 前言 一,前缀中缀后缀的基本概念 二,前缀与后缀表达式 三,使用栈实现后缀 四,由中缀到后缀 总结 前言 这里学习前缀中缀后缀为我们学习树和图做准备,这个主题主要是对于算术和逻辑表达式求值,这…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

专业的定制版软件,一键操作,无限使用

今天给大家介绍一个专业的PDF转word的小软件,软件只有5.5M。非常小,而且没有文档大小的限制,可以随意使用。 PDFtu PDF转word 软件第一次使用需要安装一下。 安装好之后,我们就能在桌面找到对应的图标,打开就能直接使…

QGIS系列22-如何提取不规则多边形的中心经纬度

今天我们来学习一下啊如何通过QGIS提取不规则多边形的中心经纬度 1、首先我们把不规则的多边形图形导入进QGIS里面去 2、现在打开的图层是不可以编辑的,因此我们还需要转换成可编辑状态,具体是选择图层,右键点击,选择切换编辑模式…

word2vec 实战应用介绍

Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…

数据库安全管理中的权限控制:保护数据资产的关键措施

title: 数据库安全管理中的权限控制:保护数据资产的关键措施 date: 2025/2/2 updated: 2025/2/2 author: cmdragon excerpt: 在信息化迅速发展的今天,数据库作为关键的数据存储和管理中心,已经成为了企业营运和决策的核心所在。然而,伴随着数据规模的不断扩大和数据价值…

【漫话机器学习系列】076.合页损失函数(Hinge Loss)

Hinge Loss损失函数 Hinge Loss(合页损失),也叫做合页损失函数,广泛用于支持向量机(SVM)等分类模型的训练过程中。它主要用于二分类问题,尤其是支持向量机中的优化目标函数。 定义与公式 对于…

openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复

我之前误打误撞遇到一次,直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功,大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题,可以尝试以下步骤&#x…

洛谷P1403 [AHOI2005] 约数研究

题目链接:P1403 [AHOI2005] 约数研究 - 洛谷 | 计算机科学教育新生态 题目难度:普及一 题目分析:本题很明显是要你求从i到n的质因数个数之和,如果采用暴力肯定是超时的,故我的想法是采用埃氏筛法来求时间复杂度为&…

elasticsearch8.15 高可用集群搭建(含认证Kibana)

文章目录 1.资源配置2.系统参数优化3.JDK17安装4.下载&安装ES 8.155.生成ES的证书(用于ES节点之间进行安全数据传输)6.修改ES 相关配置文件7.创建es用户并启动8.配置ES的账号和密码(用于ES服务端和客户端)9.下载和安装Kibana10.编辑Kibana配置文件11.启动Kiabana12.访问Kia…

MATLAB中的IIR滤波器设计

在数字信号处理中,滤波器是消除噪声、提取特征或调整信号频率的核心工具。其中,无限脉冲响应(IIR)滤波器因其低阶数实现陡峭滚降的特性,被广泛应用于音频处理、通信系统和生物医学工程等领域。借助MATLAB强大的工具箱&…

数据结构:优先级队列—堆

一、优先级队列 1、优先级队列概念 优先级队列,听名字我们就知道他是一种队列,队列在前面我们已经学习过了,它是一种先进先出的数据结构,但是在特殊的情况下,我们我们队列中元素是带有一定优先级的,它需要…

北大:三阶段学习优化多模态推理问答

📖标题:ReasVQA: Advancing VideoQA with Imperfect Reasoning Process 🌐来源:arXiv, 2501.13536 🌟摘要 🔸视频问答(VideoQA)是一项具有挑战性的任务,需要理解视频中…

从零开始:用Qt开发一个功能强大的文本编辑器——WPS项目全解析

文章目录 引言项目功能介绍1. **文件操作**2. **文本编辑功能**3. **撤销与重做**4. **剪切、复制与粘贴**5. **文本查找与替换**6. **打印功能**7. **打印预览**8. **设置字体颜色**9. **设置字号**10. **设置字体**11. **左对齐**12. **右对齐**13. **居中对齐**14. **两侧对…