2014-08-30 10 views
1

我正在開發2D遊戲,rts遊戲,有點像COC(Clash of Clans)。酷手機遊戲,呵呵。但是我遇到了路徑尋找的問題,像往常一樣,我通過手指觸摸將每個代理放置在屏幕的某個位置,然後執行路徑尋找算法,但是在某些情況下,這會導致性能損失,並且您的手機將會非常當你的代理人突然同時增加時,這是熱的手機遊戲(例如rts)的功能強大的設備上的任何尋路手段和策略?

實際上,無論什麼路徑查找我使用,例如*,Dijkstra算法,或一些特別的東西(也許最佳),這始終是時間comsuming上不太強大的移動CPU的過程在整個遊戲循環,尤其是大量的代理商。據我所知,像這樣的一些遊戲,最短路徑不是焦點(人們會關心路徑代理人是否故意走路?),而不是有效和自然的路徑尋找。所以我的想法提出了一些解決方案,可能不切實際。

解決方案1:使用一些更便宜的路徑尋找算法,可能是圖形相關或somethingelse,因爲最短路徑並不重要。

解決方案2:對ai模塊進行一些限制以處理代理進行尋路,例如間隔尋路算法調用的上限,也就是說,這些代理中只有一兩個代理進行了規劃,讓他們休息他們計劃在幾個遊戲框架之後。如你所知,它的缺點是顯而易見的。

以上是我想要的。希望你的遊戲開發人員能夠給我很好的想法,技巧,我會接受。非常感謝你。

編輯: 這裏是我的相關僞代碼,並過程cresspond我的遊戲邏輯。 //inside logic thread procedure putonagent if (need to put agent on world space) //do standard a* path-finding for an agent path_list=do_aStar_path_finding(attacktargetpos,startpos); and then enqueue path_list; ...... end path_list的隊列最終被可視代理用於前進。任何提示?

+0

問題太廣泛了。如果你發佈你的代碼,我們也許能夠查明一些優化,但你應該張貼上代碼審查:http://codereview.stackexchange.com – LearnCocos2D 2014-08-30 16:46:49

回答

1

查找「分級尋路」假設你開車去了一個很遠的城市,在你上車之前你並沒有計劃整條路線!

尋路通常是分步進行,就像它不是一個函數調用,N次迭代之後,它會返回(並指出它沒有完成),所以它可以在下一可用時間運行。基本上,而不是與當地人認爲operator()和狀態變量作爲一個類的成員功能。

爲了讓它更快,你可以使用A *尋路的方法制作啓發式垃圾,假設我使用了10 *的啓發式,它可能找不到最短路徑,但它會有一個強烈偏向目標而不是「扇出」並在封閉區域進一步探索。

+0

真的很抱歉這個職位。這是很長的時間,因爲我的國家的某種程度上阻塞了計算器 – qxsl2000 2014-11-27 03:42:54