Java2D冲突无法正确处理磁贴大小

时间:2014-01-22 15:52:39

标签: java map 2d

我在我的2D游戏中与我的平铺地图进行了简单的碰撞,但看起来碰撞并没有看到玩家的高度或瓷砖的大小,我的意思是,如果我从左边走到右边,它有些可行,所以是从上到下,但如果我从右到左或从下到上走,它只会检测到位置中心的另一个不正确的瓷砖。

以下gif将显示从左到右的示例&从上到下有效:

顺便说一句:0 =沙1 =熔岩(红色),见左侧底部的println !!

img http://gyazo.com/7f4dbd7109a341e1a063970a7ed637b5.gif

以下一个将显示从右到左,这不起作用,所以你可以看到:

img http://gyazo.com/8ea3df0f2c1961f9ae756611c8ac9e0e.gif

我不确定为什么会发生这种情况,这就是我在当前区域检测瓷砖的方式:

    int[][] mapData = map.getMap();
    System.out.println(mapData[p.getY() / 30][p.getX() / 30]);

这就是我从.txt文件获取地图的方式:

public void buildTile() throws NumberFormatException, IOException {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(this.tileMap));
        this.tileWidth = Integer.parseInt(reader.readLine());
        this.tileHeight = Integer.parseInt(reader.readLine());
        map = new int[this.tileHeight][this.tileWidth];
        for (int i = 0; i < this.tileHeight; i++) {
            String line = reader.readLine();
            String[] chars = line.split(" ");
            for (int j = 0; j < this.tileWidth; j++) {
                if (j >= chars.length) {
                    reader.close();
                    return;
                }
                map[i][j] = Integer.parseInt(chars[j]);
            }
        }
        reader.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

但大多数情况下,问题可能在于绘图方法,因为我们真的不知道瓷砖是30x30,我不确定,但这是我的绘图方法:

private void renderMap(Graphics2D g) throws IOException {
    Player p1 = this.game.getPlayer();
    int[][] tiledMap = this.map.getMap();
    for (int i = 0; i < this.map.getHeight(); i++) {
        for (int j = 0; j < this.map.getWidth(); j++) {
            int currentRow = tiledMap[i][j];            
            if (currentRow == 0) {
                g.drawImage(Collusion.getTile(currentRow), (j * 30) + p1.getOffX(), (i * 30) + p1.getOffY(), null);
            }               
            if (currentRow == 1) {
                g.setColor(Color.RED);
                g.fillRect((j * 30) + p1.getOffX(), (i * 30) + p1.getOffY(), 30, 30);
            }
        }           
    }
}

为什么这样做?如果您需要更多代码来检测问题,请告诉我。 也许我需要一种更好的阅读/绘制地图的方式?

1 个答案:

答案 0 :(得分:0)

当图的右下角与正方形连接时,看起来好像正在进行检测。检查碰撞检测以确保它检查角色的每个角落而不是单个点。 除非您发布与碰撞相关的代码,否则我无法告诉您更多信息。