AOI算法介绍


AOI算法简介

定义: 获取感兴趣的区域(Area Of Interest)的算法。

解决的问题: 形成周围的概念。在多人游戏中,各个游戏客户端之间需要通过服务器向彼此更新自身状态。但对于当玩家来说,我们不需要获取“太远”的玩家的信息,所以,在服务器端,我们通过AOI算法可以获取到某个客户端“周围”的玩家,进而只在该小范围内同步信息。

网格法AOI

  • 参考游戏世界的坐标,创建一个边界相同的矩形。
  • 选取适当的颗粒度,将矩形分割成几×几的网格。
  • 每个客户端都要按照实际坐标添加到某个格子里。
  • 客户端所在格子的周围八个格子内的玩家就是周围玩家。

举例: 世界坐标是X[20,200],Y[50,230],划分成6×6的网格为:

游戏网格

  • 已知玩家坐标(x,y),该玩家在几号网格?

网格编号=(x-x轴起始坐标)/x轴网格宽度 + (y-y轴起始坐标)/y轴宽度*x轴网格数量 x轴网格宽度=(x轴结束坐标-x轴起始坐标)/x轴网格数量;y轴的计算方式相同

  • 已知玩家在n号网格,周围的格子(包括自己)有哪些?

周围网格

AOI算法实现

  • 面向接口编程,定义AOI_Player类用于表示网格内的玩家,提供纯虚函数获取玩家坐标
  • 网格类用于存放网格内的玩家:封装一个list用于添加和删除玩家
  • 世界地图类用于构造和表示所有网格
    • 属性:x和y轴的起始结束坐标,x和y轴的网格数
    • 网格表示:封装一个vector存放所有的网格对象,网格序号按照vector存储序号表示
    • 主要函数:根据坐标获取网格,根据网格号获取周围网格


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM