MMORPG游戏AOI流程
AOI存在结构
一、观测单位数据结构
PAoiobjRec结构体代表每个可被观察到的单位,存放每个单位的id和句柄
TAoiObjRec = record
ObjID: Int64;
//根据以下两个可以
hndid: int64;
hndidx: Integer;
objkind: byte;
end;
PAoiObjRec = ^TAoiObjRec
二、AOI管理类数据结构
TAoilnfo AOI的类,所有带有视野的生物身上都有此类,管理自身所有视野相关的各种操作,保存视野数据
TAoilnfo = class
Scribehash: TInt64hash; //我订阅别人–> PAoiObjRec
Subscribehash: TInt64Hash; //别人订阅我–> PAoiObjRec
OnDisappear: TOnDisappear; //自身消失时的回调函数
OnAppear: TOnAppear; //自身出现时的回调函数
End;
回调函数
对于不同的生物视野内的出现和消失可能需要不同的操作,因此采用回调函数 OnDisappear,OnAppear来实现。
例:对于玩家视野内出现生物或道具时需要通知客户端,对于怪视野内出现生物或道具时不需要任何通知。
订阅关系
1、玩家和玩家之间:可以互相订阅,可以相互被订阅
2、玩家和怪之间:玩家可以订阅怪,怪可以被玩家订阅,怪只能被玩家订阅,不能订阅玩家(因为没有必要,怪如果需要寻找玩家则只需去自身的被订阅列表内寻找即可)
3、怪和怪之间:互相不可订阅,互相不可被订阅
大小格转换
为防止周围坐标格子变化太过频繁,过多更新AOl,因此对周围的坐标格子做了大小格子的转换,把相邻的几个小格子算作一个大格子,玩家移动时若大格子范围没有发生变化,
则无需更新AOI。
执行过程
一、移动(走、跑、瞬移之类)后更新视野范围
二、更新视野范围后如果与原先的视野范围有重叠部分
1、对比自己移动后的视野范围和原先的视野范围,计算出视野范围新增的部分和减少 的部分
2、获取减少的部分的视野对象,移除双方的AOl列表(自己的订阅列表,对方的被
订阅列表,自己的被订阅列表,对方的订阅列表), OnDisappear通知对方自己消失
3、获取增加的部分的视野对象,加入双方的AOl列表(自己的订阅列表,对方的被
订阅列表,自己的被订阅列表,对方的订阅列表), OnAppear通知对方自己出现
三、更新视野范围后如果与原先的视野范围没有重叠部分
1、遍历自己的订阅列表中的所有对象,从他们的被订阅列表中把自己删除
2、清空自己的订阅列表
3、遍历自己的被订阅列表, OnDisappear通知对方自己消失,并从他们的订阅列表中 把自己删除
4、清空自己的被订阅列表
5、计算自己的视野范围,找到视野范围内的所有可见对象
6、根据是否在各自的视野范围内加入双方的AOl列表(自己的订阅列表,对方的被
订阅列表,自己的被订阅列表,对方的订阅列表), OnAppear通知对方自己出现
MMORPG游戏AOI流程相关推荐
- MMORPG游戏AOI解决方案
MMORPG游戏AOI解决方案 参考文章: (1)MMORPG游戏AOI解决方案 (2)https://www.cnblogs.com/xulidong/p/5661447.html (3)https ...
- 制作MMORPG游戏需要储备哪些门子技术
今天给大家分享一下制作一个MMORPG游戏需要学习的知识点和技术储备.MMORPG游戏又叫大型多人在线角色扮演类游戏,对技术,美术,策划的要求非常的高,制作一个成功的MMORPG不容易,今天我们从技术 ...
- MMORPG游戏设计
百度搜索:MMORPG游戏服务器 http://tieba.baidu.com/p/3450602945?pn=3 一个不错的游戏开发过程,涉及到很多方面的技术,包含客户端和服务器 文中提到KBEng ...
- 国内外3D游戏开发流程和职位分类
国内外3D游戏开发流程和职位分类 分类: 网游相关2010-07-04 21:11 851人阅读 评论(0) 收藏 举报 国内3D游戏开发流程 开发团队 n 制作人 n 执行制作人 n 策划团队 n ...
- 游戏公司组成架构和游戏开发流程简述
游戏公司组成架构和游戏开发流程简述 [基本概念] 游戏公司一般是指游戏开发公司或游戏发行.代理公司. 那游戏公司开发游戏需要哪些技术人员?简单的说:需要游戏造型.游戏动画.3D美工.纹理师.原画设计师 ...
- 23种设计模式在MMORPG游戏中的应用
设计原则和设计模式是软件工程领域的两个重要概念,设计原则提供了编写高质量.可维护代码的指导思想,而设计模式则为特定问题提供了经过验证的解决方案.下面是7大设计原则和23种设计模式的总结: 7大设计原则 ...
- 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)
使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定.捕获所有异常.非常适合从头开始,但大公司已经有现成的C++框架.所以不会使用) 参考文章: (1)使用 Go 语言开发大型 MMO ...
- Unity MMORPG游戏优化经验分享
今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORPG游戏进行优化. 在优化Unity游戏时,我们一般从四个方面:CPU.GPU.内存.工程配置等入手, ...
- 微信小游戏申请注册流程+开发微信小游戏类目需要具备条件
微信小游戏申请注册流程+开发微信小游戏类目需要具备条件 在这里先讲一下,小程序和小游戏前面的注册流程都是一样的,在注册完毕登录小程序后台后选择类目时需要注意一下,我下面讲解的是已经通过认证的服务号进行 ...
最新文章
- 详解物联网的中间件:为何说它是不可或缺的?
- POJ1990:MooFest——题解
- attribute关键字
- R3Injector实例里的records map的填充逻辑
- Nginx:限流、缓存、黑白名单等功能详解!
- 五年级下册电子计算机与多媒体,语文人教版五年级下册《电子计算机与多媒体》.doc...
- Atitit.js this错误指向window的解决方案
- html的语义化面试题,前端面试题-HTML结构语义化
- linux的挂载的问题,重启后就挂载就没有了
- C++求字符串长度的两种方法
- plt.imshow显示CT/MRI图像
- python+selenium小米商城红米K40手机抢购!
- 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(1)
- VB案例:快乐学英语
- Android Audio 架构分析
- [vijos P1391] 想越狱的小杉
- 计算机应用基础2019年12月所有题,2019年12月网络教育统考《计算机应用基础》复习题(九)...
- OSPF基本工作原理(上)
- [时间序列分析][1]--平稳性,白噪声的检验
- 写文三年了,给大家说点儿心里话
热门文章
- Day778.正则表达式问题 -Java 性能调优实战
- 数据挖掘、机器学习、深度学习的区别
- plc和单片机及c语言区别,单片机和PLC的区别大解析
- linux机顶盒如何刷安卓系统下载软件,【当贝市场】一招学会IPTV盒子刷安卓系统教程...
- android切环境插件,Android Studio 2.0 - 插件太旧,请更新到更新版本,或设置ANDROID_DAILY_OVERRIDE环境变量...
- Linux网络配置、克隆 (2)
- 医号馆诊所管理软件——电子处方系统更新
- 学校计算机保管制度,学校计算机室安全管理制度
- 快速了解 AMP (Accelerated Mobile Pages)
- 自己动手写android手机桌面(第一篇)