2D 平铺游戏 - 使用新的不良数据



在我的 2D 平铺游戏中,当我在另一个 for 循环中更新 2D 数组中的所有对象时,我遇到了一个问题(在 2D 数组中从左上角到右下,逐行循环(如下面的代码((, 如果程序在索引 (5,6( 处循环并且它需要来自自身下对象的数据, 它将使用他在循环为 (5,5( 时执行的新数据,但我想使用双精度 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;
}

您是说您正在逐行迭代地图,而实际上您是按列迭代地图。首先尝试循环y,然后循环x

您的更新方法也是错误的。 y+1 y = 9何时尝试访问map[x][10],这将引发ArrayOutOfBoundsException。请记住,声明为 new int[10] 的数组有 10 个项目,从 0 开始,到位置 9 结束。

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];
}

当然,你需要先做一些细胞水,但这应该放在构造函数中。

相关内容

  • 没有找到相关文章

最新更新