![]()
ps : 這是現在所在的地圖,紅圈編號01是起點,-2是終點
![]()
ps : 這是尋路用的虛擬地圖,流水編號就是已找到的路線。
![]()
ps : 這是最後的顯示結果。
![]()
ps : 這是改變終點位置,再尋一次路,並非總是最短路徑。
![]()
ps : 這是起點終點都改變了,也並非是最短路徑,但是都能正確找到路。
最近準備開始做3D地圖上的人物移動時,就去找出以前寫的路徑搜尋程式碼,
然後使用前稍微再測試一下看看,發現,怎麼執行結果怪怪的。。。
仔細檢查許久後,確定真的有bug啦~

原來是。。。以前曾有稍微改過,但是沒有經過仔細的測試。。。
難怪會遺留下bug。。。真是的。。。

不過,現在已經除掉嚕。。。也經過詳細的檢查了。
此路徑搜尋演算法是採用漩渦式的探測,每次尋路時都盡量向終點移動,
每移動一格,都會將移動路徑用數字依序紀錄在一個
虛擬地圖內。
(此虛擬地圖可以自行設定大小,能決定尋路的遠近喔)
若是遇到死路,則開始從走過的路倒退,直到找到新路徑出現。
若是已找到的路徑超過512格,則判定為無路,不再搜尋。
若是虛擬地圖設太小而終點太遠,則判定為無路,不再搜尋。
所以將虛擬地圖設大,可以找到更遠的終點,
但是也更花搜尋時間和虛擬地圖記憶體。
若是順利找到了終點,則開始進行路線最佳化。
最佳化原理是,用路線的每一格編號來進行判斷,將編號越大的串連起來,
則有可能會是最短路線。(但不保證是)
例如現在這格編號是1,然後再開始搜尋該鄰近8格,
如果編號大於1,則先紀錄起來,直到鄰近8格都檢查過。。。
假設如果最後找到最大的編號是10,則會將路線的2~9編號格剃除,
而路線編號就會是1,10,11,12,13。。。
我這樣說明可能不清楚,大家也很難懂吧,那請多包涵了~
這裡有路徑搜尋程式碼可以下載:我的路徑搜尋程式碼下載連結若是有興趣的話,可以研究看看喔!
這並非是最好的路徑搜尋演算法,只能算是最容易實現的演算法。
而搜尋效能還不錯喔~
人物移動搜尋路徑時完全不會太慢。
有興趣的人可以參考看看喔~