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