百度百科
四元樹又稱四叉樹是一種樹狀數據結構,在每個節點上會有四個子區塊。四元樹常應用於二維空間數據的分析與分類。 它將數據區分紅爲四個象限。數據範圍能夠是方形或矩形或其餘任意形狀。
從定義咱們能夠看出重點信息:node
講解以前須要先說明一下四叉樹是用來作什麼的,明白了原理纔好理解它的行爲。
使用四叉樹就是使用分類的方法,減小碰撞節點的個數,只取出與給定碰撞體相同區域或者壓在碰撞體所在區域邊上的對象。數據結構
從上面的圖示咱們能夠很好理解四叉樹的原理。涉及的都是插入操做。
那麼插入操做具體都作了什麼呢?
從代碼中咱們能夠看出:框架
我是把四插入做爲了對象管理器使用,要否則對象也須要更新,因此有了這一步操做。若是不這樣你須要本身建立對象管理器,一個一個放進去,刪除。經過四叉樹直接管理省了很多事情。函數
這是一個遞歸操做,更新象限作的事情比較多了。this
檢查對象是否存活,若是死亡就回收,我這裏使用了對象池,因此對象實現了poolAble接口。
3d
判斷對象的所佔區域是否在四叉樹的區域內
這裏須要說明的是一個四叉樹自己的區域是它管理的四個象限這麼大。也就是一個四叉樹管理四個象限
不在管理區域的話須要判斷當前this是否爲根節點,若是是說明對象已經出屏了。(這個時候能夠經過對象實現的isVisible接口來控制是否回收,由於不是全部在屏幕外的都要回收,好比要進入屏幕的敵人,是不可能回收的,因此須要本身用isVisible接口來控制)。若是不是就將對象放入根節點,從新劃分。對象
在管理區域內,就看看在四叉樹管理的哪一個象限裏。更新象限信息。
若是沒有變化什麼都不過,若是有變化,先判斷象限是否爲-1,爲何會出現-1,也就是不在四個象限的任何一個象限?由於壓線了。此番操做後的結果以下圖。
blog
天然就是把要碰撞的對象傳給retrieve函數得到須要碰撞的對象列表進行碰撞檢測了。
也就是文章靠頭說的:
使用四叉樹就目的是爲了減小碰撞節點的個數。使用的是分類的方法。
至於用什麼樣的碰撞檢測函數,不是四叉樹關心的事情,
至於用幾個四叉樹管理對象,也不是四叉樹關心的事情。
教程
想要demo的同窗能夠去個人微店或者官方creator商城購買《跨引擎遊戲框架》源碼,跟demo是一個項目。買過的同窗請加我好友,羣已經建好,有更新我會羣裏直接發包。遞歸
源碼購買入口:
demo展現:
項目截圖:
框架的相關模塊教程能夠到《個人專輯》遊戲開發進階教程中獲取。
後續還會推出更多與框架有關的教程:如:戰鬥框架,教學框架等等。並附帶完整的遊戲實現(飛行射擊遊戲爲例,學會作飛行射擊遊戲不是目的,目的是經過這一款遊戲,你能夠得到作其餘全部類型的遊戲的思路)。但願能夠在不餓死本身的前提下幫助更過的朋友們快速找到開發思路。
長按下方二維碼,關注《微笑遊戲》公衆號,獲取更多精彩內容。
歡迎掃碼關注公衆號《微笑遊戲》,瀏覽更多內容。