在我的2D Tiled游戏中,当我在另一个内部的for循环中更新2D数组中的所有Object时(从左上角到右下角循环,逐行循环(如代码),我遇到了问题如果程序在索引(5,6)处循环并且它需要来自Object下面的数据,它将使用他在循环处于(5,5)时执行的新数据但是我想要在double for循环开始之前使用所有数据...
一个基本的例子:
int[][] map = new int[10][10];
for(int x = 0; x < 10; x++)
{
for(int y = 0; y < 10; y++)
{
update(x, y, map);
}
}
// I remember you that it is an example
void update(int x, int y, int[][] m)
{
m[x][y] = 0
if(y > 9) { return; }
m[x][y + 1] = 1
}
它会立即将数据“1”放在(x,10),而不考虑它会产生错误......(ArrayOutOfBoundsException ...)
如果他没有启动双循环,我怎么能使用数组的数据呢?
我知道它通常是ArrayOutOfBoundExecption,并且如果我可以像我在这里做的那样纠正它
int Water = 1;
int Air = 0;
int[][] map = new int[20][20];
void update()
{
for(int x = 0; x < 10; x++)
{
for(int y = 0; y < 10; y++)
{
tick(x, y, map);
}
}
}
void tick(int x, int y, int[][] m)
{
if(y > m.lenght - 1) { return; }
m[x][y] = Air;
m[x][y + 1] = Water;
}
答案 0 :(得分:0)
int Water = 1;
int Air = 0;
int[][] map = new int[20][20];
void update()
{
for(int x = 0; x < 10; x++)
{
for(int y = 9; y >= 0; y--)
{
tick(x, y, map);
}
}
}
void tick(int x, int y, int[][] m)
{
if (y < m[0].length - 1)
m[x][y+1] = m[x][y];
}
当然,你需要先开一些细胞水,但那应该放在构造函数中。
答案 1 :(得分:0)
你是说当你按列实际执行时,你正在逐行迭代你的地图。首先尝试针对y
循环,然后针对x
循环。
您的更新方法也有误。 y+1
当y = 9
尝试访问map[x][10]
时会ArrayOutOfBoundsException
new int[10]
。请记住,声明为{{1}}的数组有10个项目,从0开始,到9位结束。