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

时间:2017-05-12 10:19:18

标签: java libgdx tile isometric tiled

我正在开发一款类似于WC3中流行的“术士”自定义地图的游戏。对于我正在使用平铺地图的游戏,但是玩家没有(并且不应该)使用LibGDX tilesmap 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而不是正方形,但我不确定这是否正确,如果是,那么使用哪种数学。

Orthographic and Isometric tiledmap

1 个答案:

答案 0 :(得分:0)

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

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