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

时间:2013-05-02 19:03:24

标签: java 2d-games tiles-game

在我的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;
}

2 个答案:

答案 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+1y = 9尝试访问map[x][10]时会ArrayOutOfBoundsException new int[10]。请记住,声明为{{1}}的数组有10个项目,从0开始,到9位结束。