cocos2d x遊戲例項(7) A星演算法(3)

2021-08-26 17:36:18 字數 345 閱讀 7561

然後我們獲得父節點索引,即close列表中的最後乙個元素,然後檢測該元素,是否離目標位置只差乙個點的距離,如果是的話我們就獲得了路徑,我們首先看如果沒到達目標位置時,我們進行a星搜尋的函式

在這裡,我們分別找目前位置的地圖索引值,上下左右位置,首先判斷他是否超出了地圖的位置,然後檢測該點是否是地圖中不能去的位置。函式如下

我們可以看到遍歷open列表,如果不存在則返回true,否則返回false,如果這是已經在open列表中並且是個更優解,我們在這裡就完成我們的替換

之後檢測是否在close列表中就更為簡單,遍歷close列表,如果則返回false,否則返回true,**如下:

如有錯誤之處,希望大家多多指正

cocos2d x遊戲例項(6) A星演算法(2)

首先函式從findpath函式開始,初始化的內容如下 首先是把當前位置和目標位置賦給我們這個類的成員變數,然後把我們的地圖變數傳入到成員變數map 中,然後分別初始化 open close path 列表,其中 path 和close 列表先為空,open 列表中為了進行堆排序時方便 堆排序時從索引...

cocos2d x遊戲例項(5) A星演算法(1)

下面我們就介紹一下a星演算法,他就是一種啟發性的演算法,根據現在到達這個位置的步數及之後的 估計步數 即f g h,f是整個從起點到終點的代價,g是從起點到我們目前位置的步數,h是從目前位置到終點的估計值,注意這裡是估計值,所以我們得到解並不一定是最好的解,具體解 好 到什麼程度呢?就是要根據h的估...

cocos2d x遊戲例項(8) A星演算法(4)

繼續a星演算法,我們在經歷了地圖的檢測,並且檢測 open 列表和close 列表之後。如果還沒有被加入到 open 和close 列表中,我們就把他加入到我們的 open 列表中,方法如下 很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下 堆排序之前已經介紹過,就是保證樹形結構的父...