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流程相关推荐

  1. MMORPG游戏AOI解决方案

    MMORPG游戏AOI解决方案 参考文章: (1)MMORPG游戏AOI解决方案 (2)https://www.cnblogs.com/xulidong/p/5661447.html (3)https ...

  2. 制作MMORPG游戏需要储备哪些门子技术

    今天给大家分享一下制作一个MMORPG游戏需要学习的知识点和技术储备.MMORPG游戏又叫大型多人在线角色扮演类游戏,对技术,美术,策划的要求非常的高,制作一个成功的MMORPG不容易,今天我们从技术 ...

  3. MMORPG游戏设计

    百度搜索:MMORPG游戏服务器 http://tieba.baidu.com/p/3450602945?pn=3 一个不错的游戏开发过程,涉及到很多方面的技术,包含客户端和服务器 文中提到KBEng ...

  4. 国内外3D游戏开发流程和职位分类

    国内外3D游戏开发流程和职位分类 分类: 网游相关2010-07-04 21:11 851人阅读 评论(0) 收藏 举报 国内3D游戏开发流程 开发团队 n 制作人 n 执行制作人 n 策划团队 n ...

  5. 游戏公司组成架构和游戏开发流程简述

    游戏公司组成架构和游戏开发流程简述 [基本概念] 游戏公司一般是指游戏开发公司或游戏发行.代理公司. 那游戏公司开发游戏需要哪些技术人员?简单的说:需要游戏造型.游戏动画.3D美工.纹理师.原画设计师 ...

  6. 23种设计模式在MMORPG游戏中的应用

    设计原则和设计模式是软件工程领域的两个重要概念,设计原则提供了编写高质量.可维护代码的指导思想,而设计模式则为特定问题提供了经过验证的解决方案.下面是7大设计原则和23种设计模式的总结: 7大设计原则 ...

  7. 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)

    使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定.捕获所有异常.非常适合从头开始,但大公司已经有现成的C++框架.所以不会使用) 参考文章: (1)使用 Go 语言开发大型 MMO ...

  8. Unity MMORPG游戏优化经验分享

    今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORPG游戏进行优化. 在优化Unity游戏时,我们一般从四个方面:CPU.GPU.内存.工程配置等入手, ...

  9. 微信小游戏申请注册流程+开发微信小游戏类目需要具备条件

    微信小游戏申请注册流程+开发微信小游戏类目需要具备条件 在这里先讲一下,小程序和小游戏前面的注册流程都是一样的,在注册完毕登录小程序后台后选择类目时需要注意一下,我下面讲解的是已经通过认证的服务号进行 ...

最新文章

  1. 详解物联网的中间件:为何说它是不可或缺的?
  2. POJ1990:MooFest——题解
  3. attribute关键字
  4. R3Injector实例里的records map的填充逻辑
  5. Nginx:限流、缓存、黑白名单等功能详解!
  6. 五年级下册电子计算机与多媒体,语文人教版五年级下册《电子计算机与多媒体》.doc...
  7. Atitit.js this错误指向window的解决方案
  8. html的语义化面试题,前端面试题-HTML结构语义化
  9. linux的挂载的问题,重启后就挂载就没有了
  10. C++求字符串长度的两种方法
  11. plt.imshow显示CT/MRI图像
  12. python+selenium小米商城红米K40手机抢购!
  13. 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(1)
  14. VB案例:快乐学英语
  15. Android Audio 架构分析
  16. [vijos P1391] 想越狱的小杉
  17. 计算机应用基础2019年12月所有题,2019年12月网络教育统考《计算机应用基础》复习题(九)...
  18. OSPF基本工作原理(上)
  19. [时间序列分析][1]--平稳性,白噪声的检验
  20. 写文三年了,给大家说点儿心里话

热门文章

  1. Day778.正则表达式问题 -Java 性能调优实战
  2. 数据挖掘、机器学习、深度学习的区别
  3. plc和单片机及c语言区别,单片机和PLC的区别大解析
  4. linux机顶盒如何刷安卓系统下载软件,【当贝市场】一招学会IPTV盒子刷安卓系统教程...
  5. android切环境插件,Android Studio 2.0 - 插件太旧,请更新到更新版本,或设置ANDROID_DAILY_OVERRIDE环境变量...
  6. Linux网络配置、克隆 (2)
  7. 医号馆诊所管理软件——电子处方系统更新
  8. 学校计算机保管制度,学校计算机室安全管理制度
  9. 快速了解 AMP (Accelerated Mobile Pages)
  10. 自己动手写android手机桌面(第一篇)