cocos2d-x游戏实例(6)-A星算法(2)
小滿(bill man)個人原創,歡迎轉載,轉載請注明地址,小滿(bill man)的專欄地址http://blog.csdn.net/bill_man
上一篇中我們研究了A星算法的基本概念,本篇介紹A星算法的具體實現。
首先函數從findpath函數開始,初始化的內容如下
首先是把當前位置和目標位置賦給我們這個類的成員變量,然后把我們的地圖變量傳入到成員變量map中,然后分別初始化open,close,path列表,其中path和close列表先為空,open列表中為了進行堆排序時方便(堆排序時從索引0開始時,索引乘二還是0,所以這樣會造成不便)。然后把起點加入到open列表中,這里涉及到geth的估計函數,因為到起點的代價是0,從起點到終點的估計函數geth如下:
我們選取的這個估計函數比較簡單,就是分別算從本點到目標點的橫縱索引值,并把它乘以10,我們把臨近格之間的代價定為10,那么對角線的代價就是14(10*根號2)。繼續回到findpath中,我們開始真正的搜索了
我們遍歷open列表中的元素,首先通過fromopentoclose()函數把open列表中的第一個元素(第0個元素無效,前文已經說過了)刪除并把他加入到close列表中。fromopentoclose函數如下
首先從open中把第一個元素并把它加入到close函數中,然后在removefromopen函數中把open列表中的第一個函數換成open中的最后一個函數,底下進行一下堆排序,這里簡單說一下堆排序,就是把整個的數組看成是一個樹形結構,然后保證父節點比子節點的f值小即可,這樣一來,第一個元素就是最好的
如有錯誤之處,希望大家多多指正
下一篇繼續A星算法游戲實例
總結
以上是生活随笔為你收集整理的cocos2d-x游戏实例(6)-A星算法(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2d-x游戏实例(4)-地图碰
- 下一篇: cocos2d-x游戏实例(7)-A星算