我正在尝试构建一个基于A星路径查找的AI,适用于简单的四方向移动网格。然而,每当我尝试将节点添加到比较字典并对其进行排序时,程序在Dictionary.add处崩溃。我不太确定这是为什么,有人能发现其中的缺陷吗?
void DirectionFinder(){ // 查找目标点 //
GetBoardPosition();
BuildOrReBuildPawnRefBoard();
bool IsTrue = false;
int Serial = lastSquare.Location.Serial;
// 获取此节点邻居节点的序列键 //
bool TestNode = NodesClosed.ContainsKey(Serial);
Dictionary<int, Node> SortArray = new Dictionary<int, Node>();
SortArray.Clear();
if (TestNode)
{
Node ScanNode = NodesClosed[Serial];
// 获取我的邻居节点数量 //
int TestNumNeighbors = ScanNode.NeighborNodes.Count;
// 设置一个循环,遍历这些节点并获取得分最低的移动节点 //
for (int loop = 0; loop < TestNumNeighbors; loop++)
{
int ScanNodePointX = ScanNode.NeighborNodes[loop].X;
int ScanNodePointY = ScanNode.NeighborNodes[loop].Y;
int ScanTestSerial = System_GameController.Instance.NodeArray[ScanNodePointX, ScanNodePointY].Location.Serial;
bool IsNodeOpen = NodesOpen.ContainsKey(ScanTestSerial);
if (IsNodeOpen)
{
Debug.Log("此节点已打开:" + ScanTestSerial);
Node CompareNode = NodesOpen[ScanTestSerial];
int CostOfNode = CompareNode.TotalCost;
SortArray.Add(CostOfNode, CompareNode);
}
}
}}
它一直运行到”CostOfNode”。那部分工作正常…然后在尝试向SortArray添加时崩溃。
回答:
它在Dictionary.add处崩溃。我不太确定这是为什么,有人能发现其中的缺陷吗?
int CostOfNode = CompareNode.TotalCost;SortArray.Add(CostOfNode, CompareNode);
如果CostOfNode
对于两个不同的节点是相同的,而这两个节点都被添加到字典中,那么第二个节点会导致崩溃。
参见 Dictionary.Add:
ArgumentException
字典中已存在具有相同键的元素。