2011-07-18 489 views
4

我正在製作一款益智遊戲,需要一些尋路指導選定的單位到他們的目的地。這是我第一次處理任何類型的尋路,所以我選擇了aStar方法,這是我理解的最簡單的方法。 (感謝這個奇妙的頁面http://www.policyalmanac.org/games/aStarTutorial.htm)。 我已經走過了一條路,比我預期的還要遠,但還是有一些小問題。需要一些尋路的幫助!

我可以寫一個很長的解釋,沒有人會理解,而是我上傳我的閃存項目,所以你可以看到: http://www.martinowullems.com/pigsplode/pigsplode%20flash.html

選擇一頭豬,然後選擇第二個區域,使其走到那裏(不底部的瓷磚,他們被竊聽:P)。黑色的瓦片是不可行的。紅色的瓦片屬於生成的路徑。我似乎走在正確的軌道上,我感覺我只是犯了一個小錯誤。選擇最佳節點(findNextNode函數)時感覺有些問題。

我一直在盯着太長的代碼,並沒有取得任何進展。 我試過看其他人的實現,但我總是很難理解別人的工作。

任何幫助將不勝感激,希望繼續與該項目!

我做了一個wonderfl版本,所以你可以檢查出來,撥弄代碼: http://wonderfl.net/c/hRtO

+0

增加了一個wonderfl鏈接:http://wonderfl.net/c/hRtO – omgnoseat

回答

0

placeNode()功能,在當前節點已經是開放列表中的情況下,你沒有改變使用新的父節點改進G值時的父節點。

//if it is already on the open list - check if it is a better option 
    if (node.G > parentnode.G + 10) { 

    //recalculate 
     node.parentNode = parentnode;  //add this line 
     node.G = parentnode.G + 10; 
     node.F = node.G + node.H; 
    } 

這可能不是唯一的問題,但它看起來像一個潛在的錯誤來源。希望能幫助到你。

+0

謝謝你的提醒!絕對忘記了。這不是解決方案,雖然:( 但它已經明確解決未來的問題:) – omgnoseat