繼續a星演算法,我們在經歷了地圖的檢測,並且檢測
open
列表和close
列表之後。如果還沒有被加入到
open
和close
列表中,我們就把他加入到我們的
open
列表中,方法如下:
很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下:
堆排序之前已經介紹過,就是保證樹形結構的父節點的f
值比子節點的
f值小就可以了
之後我們就進入這樣的迴圈:首先把起點放入close
列表,並檢測這點周圍點的f值(
g+h,
h我們通過本點到終點的橫縱索引差估計而來),把剩下的點放入
open
列表中,並根據
f值進行堆排序,然後把
f值最小的點放入
close
列表中,繼續處理,直到找到終點為止。其實之前我們進行的就是這個步驟。
然後我們找到路徑後就通過getpath
把路徑存入到
path
陣列中就可以了
我們就是把close
列表中的節點乙個個的插入到
path
中,直到找到起始點,也就是說
g代價為
0的點就結束了。
最後作一些處理,我們的a
星演算法就完成了。
處理的**如下
首先就是將open
和close
列表清空,以便下一次使用,然後如果我們的
path
中的數量為
0時,返回空值,否則檢測
path
中有沒有終點,如果沒有加入終點並返回
path。
到此a
如有錯誤之處,希望大家多多指正
星演算法遊戲例項
cocos2d x遊戲例項(8) A星演算法(4)
繼續a星演算法,我們在經歷了地圖的檢測,並且檢測open列表和close列表之後。如果還沒有被加入到open和close列表中,我們就把他加入到我們的open列表中,方法如下 很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下 堆排序之前已經介紹過,就是保證樹形結構的父節點的f值比子節...
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的估...