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

2021-08-26 18:23:31 字數 469 閱讀 9695

我們這是乙個「指哪打哪」的例子,也就是說,使用者點到哪個位置,我們的主角就會移動到哪個位置,我們首先用我們之前已經講過的convertto2d把我們的點轉換為45度角地圖中的索引值,然後檢測我們的索引是否在地圖範圍內

之後就該a星演算法出場了,我們把主角位置索引,目標位置索引,以及地圖都傳入到findpath中,然後得到路徑,為了檢查,我們的**中還遍歷了path,並把它都顯示出來

我們這裡初始化了兩個索引,乙個是path中的點的索引,第二個就是每一步的索引,因為我們不可能一幀走一格。所以需要乙個smallstepindex。

我們首先根據我們目前的位置和下乙個path物件的位置決定我們的移動方向,然後移動。

我們每走16小步重定向一遍,即我們用16幀走完乙個格,然後再進行上一步的處理,重新定一遍方向即可,底下的視角跟隨演算法保留,這裡要說明的是我們使用a星類之前必須要在場景的初始化函式中建立一下,這裡就不再贅述了。

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

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 列表中,方法如下 很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下 堆排序之前已經介紹過,就是保證樹形結構的父...