一、直接比较所有对象

最直观也是最效率最低的一种方法。当一个事件发生,我们需要获得AOI范围以内的物体时,直接遍历游戏中所有的对象,并且进行坐标判断,如果小于或者等于AOI的范围,则为需要的游戏对象。

这种方法实现非常简单,但是带来的问题是当游戏世界中对象较多时,效率会直线低下,一般用于FPS的游戏,一般的用户不是很多,比如守望先锋,都可以不用考虑AOI方案。

二、空间切割监视的方法

将空间按照一定的方法进行分割,例如根据AOI范围的大小将整个游戏世界切分为固定大小的格子。当游戏物体位于场景的时候,根据坐标将它放入特定的格子中。

例如玩家1在位置7中,如果游戏内的AOI的范围为1个格子。当我们需要获取这个玩家周围的AOI对象时,只需要遍历7周围9个里面的对象即可。

可以看出空间分割在计算AOI对象时,只需要遍历周围几个空间格子即可,大大提高了计算效率。但是该方法也有缺点,格子数和空间大小成为正比,空间越大,所需要的内存空间也越大。果玩家数里远远小于空间的格子数,使用这种方法来计算AOI可能比第一种算法还差。

三、十字链表

格局物体的X,Y坐标分别建立两条链表A、B。在链表A上,根据对象的X坐标进行排序;在链表B上,根据对象的Y坐标进行排序。如果游戏世界内有下列坐标的对象:

(2,2),(3,4),(6,5),(1,5),(3,1),(5,2)

那么在十字链表里有如下数据结构:

当我们需要知道一共对象AOI范围内所有对象时,只需要在X、Y两条链表上向两个方向遍历即可

X链表,——> 按照X坐标排序

Y链表,——> 按照Y坐标排序

十字链表发在计算AOI范围内对象时,计算量非常小,且跟空间大小无关,因此省去大量无效的遍历过程。除了这些优点外,十字链表法也有一些需要注意的地方,因为在两条链表中都必须按照大小顺序进行排列,因此对象在不停的移动,会带来比较大量的计算。

参考资料:

《游戏开发》-网易互动娱乐事业群

云风blog:云风的 BLOG: 开发笔记 (13) : AOI 服务的设计与实现

深入探索AOI算法:深入探索AOI算法 - 知乎

游戏算法-AOI基本介绍相关推荐

  1. 游戏算法-AOI十字链表入门简单版python

    AOI十字链表python简单实现,仅用作学习,理解基本原理 AOI一般是C++去实现,本文章python写仅用来入门了解 场景内维护两个实体链表 list_x和list_y 所有实体根据x坐标大小排 ...

  2. MMORPG游戏中AOI视野算法解析

    转载:https://blog.csdn.net/ybn6775/article/details/81701167 AOI(Area Of Interest),中文就是感兴趣区域.通俗一点说,感兴趣区 ...

  3. 台球html游戏算法介绍

    台球html游戏算法介绍 获取本游戏代码 游戏运行示例 基础物理知识 构建物理模型 桌台及小球 摩擦力 小球间的碰撞检测 小球间的碰撞反应 小球与边界的碰撞 检测落袋 电脑玩家的基本思路 电脑判断击目 ...

  4. 游戏AI之初步介绍(0)

    目录 游戏AI是什么? 游戏AI和理论AI 智能的假象 (更新)游戏AI和机器学习 介绍一些游戏AI 4X游戏AI <求生之路>系列 角色扮演/沙盒游戏中的NPC 游戏AI 需要学些什么? ...

  5. java开心消消乐代码_Vue实现开心消消乐游戏算法

    摘要:这篇Vue栏目下的"Vue实现开心消消乐游戏算法",介绍的技术点是"开心消消乐.Vue.开心.游戏.算法.实现",希望对大家开发技术学习和问题解决有帮助. ...

  6. JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)

    JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码) backtrackingJumpGame.js完整源代码 backtrackingJumpGame. ...

  7. 棋牌类游戏算法–牌分类_快速分类–三向和双枢轴

    棋牌类游戏算法–牌分类 毫无疑问,Quicksort被认为是本世纪最重要的算法之一,并且它是许多语言的事实上的系统排序,包括Java中的Arrays.sort . 那么,quicksort有何新功能? ...

  8. win11玩游戏怎么样 windows11玩游戏的具体性能介绍

    最近很多升级了Win11的小伙伴在该系统上体验了一下玩游戏的感受,那么我们在windows11玩游戏会卡吗?接下来小编就把win11打游戏的性能具体介绍分享给大家.更多Windows11教程,可以参考 ...

  9. python数据结构与算法分析 第2版_题库 | 百度数据结构 / 算法面试题型介绍及解析 第 2 期...

    题目1:分解成质因数 (如 435234=251*17*17*3*2) void prim(int m, int n){ if(m>n){ while(m%n != 0) n++; m /= n ...

最新文章

  1. Tomcat 爆出高危漏洞!
  2. 使用 conda 和 Jupyter 在 R 中实现数据科学分析
  3. python中 pip的安装方法
  4. FFmpeg Filter基本使用
  5. QT+CUDA7.5+UBUNTU14.04
  6. Java 什么是静态内部类
  7. CCF NOI1121 逆波兰表达式
  8. Java — Map.keySet()、Map.put()、Map.get()【Map类、Set类】
  9. 访问iis元数据库失败怎么解决?
  10. Plc编程入门基础知识,在短时间内如何学会编程
  11. python制作恶搞_Pycharm制作搞怪弹窗的实现代码
  12. 清风老师数学建模笔记——层次分析法
  13. CodeSmith模板代码生成实战详解
  14. ifconfig创建sit隧道
  15. 每日10行代码34:wordcloud生成词云时过滤掉某些词
  16. PowerBI报表页权限控制
  17. AMD R9 280x tri-x vapor-x OC 刷新BIOS来节能降温
  18. Linux系统cp:omitting directory`XXX'问题解决
  19. 高通8953启动流程
  20. ftp下载工具绿色版,ftp下载工具有绿色版的吗?教程详解

热门文章

  1. 人才云,云计算的下一个风口
  2. shell脚本统计网站pv,每分钟/小时/天~
  3. JVM:类的加载过程
  4. XnView:图片管理的工具
  5. 无法打开mfc100ud.lib
  6. 【NOIP模拟赛】列队
  7. selenium破解B站极验验证码
  8. python获取数据——数据爬虫——代理池随机使用代理
  9. 窗口看门狗 WWDG
  10. 百元左右蓝牙耳机哪款适合玩游戏?低延迟+高颜值这五款蓝牙耳机不信你不服