所以我不确定这在哪里超出了界限,你们都可以向我指出,可能它有些愚蠢,但我真的很累,只是无法找出问题所在。我在每个 openNode.indexOf() 上都遇到错误。同样通过打印 N 值,我知道 N.getX() 或 N.getY() 永远不会低于 1。
if(N.getX() > 0)
{
flag = false;
if(!isTilePassable(nodeGrid[N.getX()-1][N.getY()].getX() * 32, nodeGrid[N.getX()-1][N.getY()].getY() * 32)) //west
closedNode.add(nodeGrid[N.getX()-1][N.getY()]);
for(Node e : closedNode)
if(e.equals(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])))
flag = true;
if(!flag)
{
openNode.get(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])).setDistance(SRC);
openNode.get(openNode.indexOf(nodeGrid[N.getX()-1][N.getY()])).setParent(N);
}
}
if(N.getY() > 0)
{
flag = false;
if(!isTilePassable(nodeGrid[N.getX()][N.getY()-1].getX() * 32, nodeGrid[N.getX()][N.getY()-1].getY() * 32)) //north
closedNode.add(nodeGrid[N.getX()][N.getY()-1]);
for(Node e : closedNode)
if(e.equals(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])))
flag = true;
if(!flag)
{
openNode.get(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])).setDistance(SRC);
openNode.get(openNode.indexOf(nodeGrid[N.getX()][N.getY()-1])).setParent(N);
}
}
这是 nodeGrid 的初始化和 x+y 值的分配节点对象接受 x 和 y 的参数
for(int i = 0; i < 36; i++)
for(int ii = 0; ii < 25; ii++)
nodeGrid[i][ii] = new Node(i,ii); //initializes node grid