我现在有一个阵列,
static int[][] map = new int[WIDTH][HEIGHT];
此代码在地图上放置切片:
for (int y = 18; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
map[x][y] = STONE;
}
}
for (int y = 18; y < 19; y++) {
for (int x = 0; x < WIDTH; x++) {
map[x][y] = GRASS;
}
}
for (int y = 19; y < 20; y++) {
for (int x = 0; x < WIDTH; x++) {
map[x][y] = DIRT;
}
}
以下是我如何渲染它们:
for (int x = 0; x < WIDTH; x++) {
for (int y = 0; y < HEIGHT; y++) {
switch (map[x][y]) {
case CLEAR:
air.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
break;
case STONE:
stone.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
break;
case GRASS:
grass.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
break;
case DIRT:
dirt.draw(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
break;
}
}
}
如何转换此代码以使用二维arraylist替换数组映射,以便我可以像Minecraft一样删除这些磁贴?
答案 0 :(得分:3)
尝试
ArrayList<ArrayList<Integer>> map = new ArrayList<ArrayList<Integer>>();
基本上你要创建一个数组列表的数组列表,其中实习生是整数列表。
答案 1 :(得分:1)
就个人而言,我会用一个List
执行此操作,并使用数学来确定我正在查看哪个图块。
List<Integer> map = new ArrayList<Integer>(WIDTH * HEIGHT);
要查找您感兴趣的索引,可以执行以下操作:
//note that this is 0 based
//find (0,0)
map.get(0 * WIDTH + 0);
//find (0,1)
map.get(0 * WIDTH + 1);
//find (1,0)
map.get(1 * WIDTH + 0);
//In general
//find (x,y)
map.get(x * WIDTH + y);
然后,您可以使用相同的数学运算将值设置为List
。
map.set(x * WIDTH + y, STONE);