2016-04-27 20 views
2

我正在尝试在C#中编写Unity中的战术RPG,并且要这样做,我需要使用寻路,Dijkstra,节点边缘等。 我试图将2D区域字符代表我的节点的2D面积边缘的地图,这里的地图:2D区域中的未知字符

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()。我有这样的错误:

Array Out of range at the row 0 and the columns 19

问题是,我只是有一些#在这里,它甚至不应该在这里。我试图打印该字符,它不打印任何东西,所以我试图重写该行,压制\n等,我什么也没有得到。

+2

示例文件的行尾是否为“\ n”?或者他们是“\ r \ n”? –

+0

我在窗户上,很好的猜测,那是该死的\ r,谢谢! –

回答

0

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

你应该放一个,如果像这样在第二你findneighbors的:

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

也许你可以找到一个更好的办法做什么林告诉你,但请记住,如果你不避免访问不存在的数组的索引,您将不断收到此错误。

编辑。 据我们的同胞们说,有19列,而不是18列,因为我错误地算了一下。我提供的解决方案仍然有效:D

+0

没有它的19 cols,多数民众赞成在确定,但由于数组是零索引索引19 ofc超出范围。这个问题恰好出现在你说的地方。它的边缘邻居。最左边的列没有col + 1。 – yes