二维区域中的未知字符

时间:2016-04-27 14:21:00

标签: c# unity3d

我目前正在尝试使用C#在Unity上编写战术角色扮演游戏,为此,我需要使用寻路,Dijkstra,节点边缘等。 我试图在带有边的节点的2D区域中转换代表我的地图的二维char区域,这里是地图:

map

#用于标记地图的边框并避开索引超出范围错误。

这是项目的代码:

public Nodes[,] GenerateNodes(TextAsset lvl)
{
    Nodes[,] nodeArray;
    char[,] matrix = GenerateArray(lvl);

    nodeArray = new Nodes[matrix.GetLength(0), matrix.GetLength(1)];

    for (int row = 0; row < matrix.GetLength(0); row++)
    {
        for (int col = 0; col < matrix.GetLength(1); col++)
        {
            char type = matrix[row, col];
            if (type != '#' && type != '\n')
            {
                Debug.LogError(type);
                Nodes n = new Nodes(row, col, type);
                nodeArray[row, col] = n;
                findNeighbors(row, col, matrix, nodeArray); //assuming nodes and matrix variables are instance variables
            }
            else
                nodeArray[row, col] = null;
        }
    }
    return nodeArray;
}
public void findNeighbors(int row, int col, char[,] matrix, Nodes[,] nodeArray)
{
    for (int r = -1; r <= 1; r++)
    {
        for (int c = -1; c <= 1; c++)
        {
            Debug.LogError(row);
            Debug.LogError(col);
            if (matrix[row + r, col + c] != '#')
            {
                nodeArray[row, col].addEdges(nodeArray[row + r, col + c]);
            }
        }
    }
}

GenerateArray()方法正在运行;我以前用过它。问题来自findNeighbors()。我有这个错误:

  

数组超出第0行和第19列的范围

问题是我在这里只有一些#,它甚至不应该在这里。我试图打印那个char并且它什么都没打印,所以我试着重写一行,压制\n等等,然后我什么都没得到。

1 个答案:

答案 0 :(得分:0)

据我所知,有18列,你试图访问第19列,当然它会抛出这个异常。

你应该在你的发现邻居的第二个上放一个if:

if(row == 0 && r == -1)
  continue;
if(col == matrix.GetLength(1) && c == 1)
  continue;

也许你可以找到一种更好的方式去做我告诉你的事情,但请记住,如果你不避免访问不存在的数组索引,你将不断收到此错误。

编辑。 根据我们的同伴@yes,我错误地计算了19个cols而不是18个。我提供的解决方案仍然有效:D