我的 AS3 A* 寻路实现有时不会返回最有效的路线,就像这样:
[E][X][ ][ ][ ]
[.][X][.][.][ ]
[ ][.][ ][i][S]
(其中 . 是经过的节点,X 是墙壁。S = 开始,E = 结束,i = 我的假想标记)
问题:我的总分应该是(到结束的距离)30 +(到开始的距离)10 = 40,而我上面的图块的总分应该是(到结束的距离)40 +(到开始的距离)14 = 54。为什么选择 54 而不是 40,我不知道 - 我用它来查找打开列表中总分最低的节点:
var lowestTScore:int = 10000;
var pointerTo:PathNode;
for each (var Cur:PathNode in openList) {
//loops through each node in openlist and finds the one with lowest total score.
if (Cur.distS + Cur.distE < lowestTScore) {
lowestTScore = Cur.distS + Cur.distE;
pointerTo = Cur;
}
}
(我看不出有任何问题。)
我想,也许这是我计算到最后的距离的错误。所以我检查了我的代码:
theNode.distE = (Math.abs(theNode.xpos - endPts[0]) + Math.abs(theNode.ypos - endPts[1])) * 10;
(我也看不出有任何问题。)
我真的很难过。
Main.as: http://pastebin.com/ZKQJwY4S PathSearcher:as: http://pastebin.com/KnmWGbQw
(我知道直接贴出问题代码比较好,但是不知道问题代码在哪里:(对不起)
谢谢你的帮助!