游戏逻辑_垂直拆分_增量更新

前言:

本章主要讲述 游戏逻辑中_垂直拆分_增量更新 的优化

把数据库内用到放到游戏的AOI上用

基于MMORPG讲述,温故而知新

1: 人物/宠物/其他对象 属性

最小6件装备 外加时装 可能还有宠物,武魂,翅膀 变身卡 坐骑 称号 BUFF等等

这里所谓的垂直拆分_增量更新 就是 更新了 某装备,先减去这装备的属性,再增加新的 装备的 属性,这样更换/脱下 某装备 只需要更新这件 装备属性就行,有百分比 基本的算完了,再计算一次。

也可以说是也空间换时间。拆的越细,计算效率越高,但是空间需求越大;

2:AOI

一般AOI 的基本接口如下

enter:对象进入地图;

leave:对象离开地图;

move:对象在地图内移动。

这里以一般的MMORPG为例,一般 分主城与野外

先可以想象下,现在是一张世界地图,就是主城与野外 本来就是一张大地图,不过垂直拆分后,才有了主城与野外 2张地图,传送点相当于 从一个 九宫格的 一格 跑到 另外一格(灯塔也差不多,一个灯塔到另外一个 )

这里以 传送点1 与传送点2 可以相互传送为例 讲述

垂直 拆分后,如果有对象(玩家) 来回跑,2个传送点附近还有大量可视对象,

按enter leave 流程 ,

1 >进入 ,把自己广播给其他对象,同时把其他可视的对象 发送给自己,

2>离开 ,告诉其它玩家,自己消失

从后端来说,消息量太大 (出现的消息 体量大,消失还好 体量很小)

从前端来说,如果加载 再删除,再加载地图及其他对象,耗时,卡

如果在一张大地图里呢,玩家进入与离开不过是 类试于 从一大格 瞬移到另外 一大格里,

结合 延迟 消失 的策略,后端的消息量会大大减少,前端的也不需要加载,释放,反复来回,

以九宫格讲述 一般来说 九宫格 G = V ,再跨 1、2G(有飞行速度快的,可以3G,根据实际来) 就可以通知消失了

具体可以根据配置表 配置

两张图里怎么搞呢,简单,(假如设定,延迟删除为跨2G )

从传送点1 传送 到 出现点1,相当于 移动到 缓冲带,根据后面的移动情况再决定是否删除,

1> 记录上格地图ID

2>到 出现点1 再跨2个G,再删除 (到野外 后,跨到黑色框外再删除)

3>到出现点1后,直接进入传送点2,又回来了,可以当移动处理

优化enter/move 消息,主要是优化 出现的消息(这个消息量大,一般包含 对象外观 状态 特效,宠物 等等)

怎么优化呢,增量更新

对象 有1 件装备 1 个坐骑 一个出战宠物(简化版,根据实际情况自行扩展)

当前装备(坐骑,宠物类试) 版本号 当装备有更新时,更新属性的同时,更新版本号

1>在视野范围内,自己更换了,广播给其他对象时,只广播 更新的及其影响的可视属性

2>在视野范围内,

1>>自己更换了, 某对象从缓冲列表里重新回来视野时,对比装备版本号,如果什么也没变,只更新坐标,如果版本号 不相同,更新位置时,同时更新 装备及其影响的可视属性

其他的坐骑 宠物 同样如此

2>> 别的对象换装备后,别的对象的 装备版本号 与自己缓冲区里的这个对象的 装备版本号 对象,有差异,更新,没差异,只更新位置

3>可以增加一总版本号,先对比总版本号,有差异,再比较具体的 版本号,再增量更新

3:其他的垂直拆分

可以把玩家数据保存到单独的一个子进程/线程里 ,跟场景分开,还可以拆分到 计算 线程(CPU密集型)

专用用于计算任务,比如 对象更新装备,重新计算属性,可以分派 到计算 计算线程 去处理,数据进程 只等结果出来后更新,越单一职责,效率越高,

4:水平拆分

场景多线,副本等等都是水平拆分了,这里就不介绍了

5:如果觉得有用,麻烦点个赞,加个收藏

游戏逻辑的拆分上 可以 参考下 数据库 ,毕竟数据库 很成熟了,有各种解决方案

相关推荐
wanhengidc14 分钟前
《三国志异闻录》搬砖新游戏 云手机
运维·服务器·数据库·游戏·智能手机
好家伙VCC1 小时前
# 发散创新:用 Rust构建高性能游戏日系统,从零实现事件驱动架构 在现代游戏开发中,**性能与可扩展性**是核心命题。传统基于
java·python·游戏·架构·rust
魔士于安2 小时前
氛围感游戏场景,天空盒,带地形,附赠一个空要塞
游戏·unity·游戏引擎·贴图
上海云盾-小余3 小时前
CC 攻击与 DDoS 联动防护:如何构建一体化流量清洗架构
网络·安全·游戏·架构·ddos
沙振宇7 小时前
【Web】使用Vue3+PlayCanvas开发3D游戏(六)模拟自驾场景SR+3D可视化
前端·游戏·3d·vue3·playcanvas
风酥糖7 小时前
Godot游戏练习01-第15节-敌人生成动画,翻转,碰撞
游戏·游戏引擎·godot
呆呆敲代码的小Y8 小时前
Unity+AI 用一句话制作完整小游戏:飞翔的牛马【AI纯添加-0手工代码】
人工智能·游戏·unity·游戏引擎·游戏制作·unityai·一句话制作游戏
2501_918126918 小时前
学习所有6502写游戏动作的语句
汇编·嵌入式硬件·学习·游戏·个人开发
2501_918126919 小时前
学习所有6502游戏的系统
java·汇编·嵌入式硬件·学习·游戏
上海云盾-小余19 小时前
游戏盾与应用防护联动:一站式业务安全防御体系搭建指南
安全·游戏