获取玩家站在上面(玩家不会根据(等距)TiledMap LibGDX 移动

Get tile player is standing on (player doesn't move according to (isometric) TiledMap LibGDX

我正在开发一款类似于 WC3 中流行的 'Warlock' 自定义地图的游戏。对于游戏,我使用的是瓦片地图,但是玩家不会(也不应该)使用 LibGDX 瓦片地图 api 移动。相反,玩家通过矢量移动。我正在尝试通过获取玩家的世界坐标并找到该确切图块的相应行和列来注册玩家站在哪个图块上。

我似乎可以使用以下代码正确处理正交平铺地图:

  private boolean checkIfOnLava()
    {
        for (Entity e : world.getEntities(PLAYER)) {

            float height = currentLayer.getTileHeight() * currentLayer.getHeight();
            float width = currentLayer.getTileWidth() * currentLayer.getWidth();

            float playerX = e.get(Position.class).getX();
            float playerY = e.get(Position.class).getY();

            int tileRow = (int) (playerX / currentLayer.getTileWidth());
            int tileCol = (int) Math.abs((playerY - (height / 2)) / currentLayer.getTileHeight());
            System.out.println("Row: " + tileRow);
            System.out.println("Col: " + tileCol);
            if (currentLayer.getCell(tileRow, tileCol).getTile().getId() == 3) {
                System.out.println("Walking on lava");
                return true;
            }
        }
        System.out.println("walking on ground");

        return false;
    }

但是,在使用等距地图时,找到图块的相应列和行似乎有点棘手。我想我必须为 Rombus 使用一些数学而不是正方形,但我不确定那是否正确,如果正确,使用哪种数学。

我找到了我的问题的解决方案,使用以下方法,它现在可以根据其位置(以像素为单位)识别玩家所站立的图块的行和列。

private boolean OnLava()
{
    for (Entity e : world.getEntities(PLAYER)) {

        float playerX = e.get(Position.class).getX();
        float playerY = e.get(Position.class).getY();

        int tileRow = (int) (playerX / currentLayer.getTileWidth() - (playerY / currentLayer.getTileHeight()));
        int tileCol = (int) Math.abs((tileRow * currentLayer.getTileHeight() / 2 + playerY) / (currentLayer.getTileHeight() / 2));
        if (currentLayer.getCell(tileRow, tileCol).getTile().getId() == 3) {
            return true;
        }
    }
    return false;
}