日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cocos2d-x 寻路算法解析(二): 离目的地的距离优先

發(fā)布時間:2024/8/26 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cocos2d-x 寻路算法解析(二): 离目的地的距离优先 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


看這個圖,我們發(fā)現(xiàn)這個尋路算法有點傻,明明終點在右側(cè)卻每個方向都找。難道沒有其他辦法了嗎?從現(xiàn)實生活中我們知道東西如果在東邊,當然是往東邊搜索才是最好的辦法。
?

Figure 2


計算機中如何表示離目標近呢? 用圖來解釋就是這樣的,目標在右上角,我們往右走,從X軸的角度來說離目標又近了一步,同理往上走是在Y軸上里目標近一步。最好的一步應(yīng)該是圖中-2的點,X軸和Y軸同時離目標近了一步。簡單地轉(zhuǎn)換成代碼就是下面的這樣:

000

扔到heap的比較條件中我們輕易地就實現(xiàn)了按照離目標距離優(yōu)先的尋路算法,startPathFinding整個方法都不要改,只需要傳進去上面提到的比較方法就行了。

-000

離目的地的距離優(yōu)先效果圖:
?

Figure3


我們驚奇地發(fā)現(xiàn)似乎我們成功了,就用了9步就找到了目的地!

算法改進

從圖2中我們用的是X軸和Y軸上的相對距離,并不是真正的物理距離,手機號轉(zhuǎn)讓平臺意識到這個問題我們馬上修改了比較函數(shù)。物理距離當然容易算了,公式如下:


換成C++函數(shù)就是下面的樣子:

000

演示了下發(fā)現(xiàn)沒有什么變化。但我們知道我們變的更好了。

該算法存在的問題

1.很容易想到的一個問題是,它沒有考慮權(quán)重!如果目標在右側(cè),而右側(cè)是一條非常難走的路,那么這個算法將毫無顧慮地走過去,絲毫不考慮就在不遠處有條非常輕松的路。下面這個圖就可以說明這個問題。
?


2.還有個問題,即使沒有權(quán)重Cell的存在,只有可通過和不可通過Cell的存在,這個算法也有問題,我們可以人為地制造一個陷阱,雖然目標在起點的下方,但是上面有條更近的路,這個算法應(yīng)該會愚蠢地在往下找吧,這個就跟人一樣,有時候目光短淺。下圖是演示結(jié)果。
?


對比之前的算法發(fā)現(xiàn)其實上面的這條路更好的,雖然它查詢了大量的Cell才發(fā)現(xiàn)這點(人家很努力的好不好)。
?


看看還有什么更好的辦法沒有?期待下篇的尋路算法吧。

總結(jié)

以上是生活随笔為你收集整理的Cocos2d-x 寻路算法解析(二): 离目的地的距离优先的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。