gpt4 book ai didi

java - 渲染多层图 block

转载 作者:行者123 更新时间:2023-12-01 05:01:37 24 4
gpt4 key购买 nike

我有一个小问题,当我尝试在游戏中绘制多层图 block 时,只显示顶层。例如,我有一个 for 循环来绘制空气瓷砖,在其下面我有另一个循环来绘制石瓷砖。无论我做什么,只有空气瓷砖会绘制,石瓷砖不会绘制。这是我的 map 类:

public class Map {

public static final int CLEAR = 0;
public static final int STONE = 1;
public static final int GRASS = 2;
public static final int DIRT = 3;

public static final int WIDTH = 32;
public static final int HEIGHT = 24;

public static final int TILE_SIZE = 25;

static ArrayList<ArrayList<Integer>> map = new ArrayList<ArrayList<Integer>>(WIDTH * HEIGHT);

Image air, grass, stone, dirt;

public Map() {

for (int x = 0; x < WIDTH; x++) {
ArrayList<Integer> yaxis = new ArrayList<Integer>();
for (int y = 0; y < HEIGHT; y++) {
yaxis.add(CLEAR);
}
map.add(yaxis);
}

for (int x = 0; x < WIDTH; x++) {
ArrayList<Integer> yaxis = new ArrayList<Integer>();
for (int y = 0; y < HEIGHT; y++) {
yaxis.add(STONE);
}
map.add(yaxis);
}

try {
init(null, null);
} catch (SlickException e) {
e.printStackTrace();
}
render(null, null, null);

}

public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
air = new Image("res/air.png");
grass = new Image("res/grass.png");
stone = new Image("res/stone.png");
dirt = new Image("res/dirt.png");
}

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) {

for (int x = 0; x < map.size(); x++) {
for (int y = 0; y < map.get(x).size(); y++) {
switch (map.get(x).get(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;
}
}
}
}

}

如果有人能提供帮助,那就太棒了!

最佳答案

您要在此处添加空气行,然后添加石行:

for (int x = 0; x < WIDTH; x++) {
ArrayList<Integer> yaxis = new ArrayList<Integer>();
for (int y = 0; y < HEIGHT; y++) {
yaxis.add(CLEAR);
}
map.add(yaxis);
}

for (int x = 0; x < WIDTH; x++) {
ArrayList<Integer> yaxis = new ArrayList<Integer>();
for (int y = 0; y < HEIGHT; y++) {
yaxis.add(STONE);
}
map.add(yaxis);
}

问题是石 block 超出了预期的 map 尺寸 (32 x 24),因为您添加的行数是您预期的两倍。

尝试用数组替换列表列表,您会发现超出了范围。

编辑:这是使用随机数据初始化 map 的正确方法:

java.util.Random random = new java.util.Random();

for (int x = 0; x < WIDTH; x++) {
ArrayList<Integer> yaxis = new ArrayList<Integer>();
map.add(yaxis);
for (int y = 0; y < HEIGHT; y++) {
yaxis.add(random.nextInt(4));
}
}

请注意,之后您将不会添加图 block ,而只是更改值,例如。

map.get(10).set(5, CLEAR);

关于java - 渲染多层图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13322075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com