ゲームでタイルの複数のレイヤーを描画しようとすると、一番上のレイヤーしか表示されないという、ちょっとした問題があります。たとえば、空気のタイルを描画する for ループがあり、その下に石のタイルを描画する別のループがあります。空気牌だけが引けるし、石牌は何をしても引けない。私のマップクラスは次のとおりです。
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;
}
}
}
}
}
誰かが助けることができれば、それは素晴らしいことです!