Java2D 碰撞无法正确处理图 block 大小

标签 java dictionary 2d

我在 2d 游戏中与平铺 map 进行了简单的碰撞,但看起来碰撞并没有考虑玩家的高度或平铺的大小,我的意思是,如果我从左边走到右侧,它有些有用,从上到下也是如此,但是如果我从右到左或从下到上行走,它只会检测到该位置中心的另一个图 block ,这是不正确的。

下面的 gif 将显示一个从左到右和从上到下的示例:

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

img

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

img
(来源:gyazo.com)

我不太确定为什么会发生这种情况,这就是我检测当前区域中的图 block 的方式:

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

这就是我从 .txt 文件获取 map 的方法:

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

但大多数情况下,问题可能出在绘制方法上,因为我们无法真正知道图 block 是30x30,我不确定,但这是我的绘制 map 方法:

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

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

最佳答案

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

关于Java2D 碰撞无法正确处理图 block 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287651/

相关文章:

java - 算法未显示正确的输出

java - 如何从 Java 中的另一个类获取变量?

python - 如何循环遍历此 Python 字典并搜索是否存在值

java - Java 中对 Long 变量的 XOR 操作和 BitCount 返回 java.lang.NumberFormatException

Python:多个 if 条件取决于参数

python - 使用 dict 文字和 dict 构造函数之间有区别吗?

python - 二维形状顺时针方向旋转

algorithm - 如何在 O(nh) 和 O(nlog(h)) 复杂度中找到帕累托最优点?

java - 如何更改H2数据库的密码加密?

java - Hibernate Criteria 在限制中使用集合(Set)