0

これは私の配列です:

private static int[][] map = new int[WIDTH][HEIGHT];

このクラスを使用してタイルマップを生成します。

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;

private static int[][] map = new int[WIDTH][HEIGHT];

Image air, grass, stone, dirt;

Random rand = new Random();

public Map() {

    /* default map */

    /*for(int y = 0; y < WIDTH; y++){
        map[y][y] = (rand.nextInt(2));
        System.out.println(map[y][y]);
    }*/

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

    }

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

public boolean blocked(float x, float y) {
    return map[(int) x][(int) y] == STONE;
}

public static Rectangle blockBounds(int x, int y) {
    return(new Rectangle(map[0][x], map[y][0], 25, 25));
}}

私は各タイルにこのコードで長方形を割り当てたいです(私はそれが間違っていることを知っています):

public static Rectangle blockBounds(int x, int y) {
    return(new Rectangle(map[0][x], map[y][0], 25, 25));
}

タイルのx座標とy座標を取得して、長方形のコードに入れるにはどうすればよいですか?

4

2 に答える 2

0

私はあなたがこのようなものが必要だと思います:

new Rectangle(x * TILE_SIZE, Y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
于 2012-11-09T01:32:53.713 に答える
0

私はあなたが使用していると思います、

private static int[][] map = new int[WIDTH][HEIGHT];

マップを表すため。したがって、マップの各 `{x、y}は、マップ上のポイントを表します。RectangleクラスのコンストラクターであるRectangle(int x、int y、int width、int height)を使用して、左上隅が(x、y)として指定され、幅と高さが引数で指定される新しいRectangleを作成します。同じ名前の。ですから、これは簡単に機能すると思います。

new Rectangle(x, y, TILE_SIZE, TILE_SIZE)

また、このコンストラクターを使用するには、{0,0}からマップのナビゲーションを開始する必要があります。

于 2012-11-09T02:12:27.033 に答える