java - 如何使用 float 从 libGDX 中的单元格获取图 block 的位置?

标签 java libgdx box2d tiled

我目前正在制作一款游戏。这是一款基于 2D 方 block 的游戏。我试图让当你踩在水面上时,你的球员的速度和体型会发生变化。

我每 60 秒运行一次:

if(map.getTileTypeByCoordinate(0, player.sprite.getX()/4.0f, player.sprite.getY()/4.0f) == TileType.WATER){
    player.sprite.setScale(2, 1.75f);
    player.speed = 3;
} else {
    player.sprite.setScale(2, 2);
    player.speed = 5;
}

map.getTileTypeByCooperative(int layer, float x, float y); 方法如下:

public TileType getTileTypeByCoordinate(int layer, float col, float row) {
    Cell cell = ((TiledMapTileLayer) tiledMap.getLayers().get(layer)).getCell((int)(col), (int)(row));

    if(cell != null){
        TiledMapTile tile = cell.getTile();

        if(tile != null){
            int id = tile.getId();
            return TileType.getTileTypeById(id);
        }
    }

    return TileType.GRASS;
}

如果我不将 col 和 row 转换为整数,那么显然我会收到错误。

这是一个问题的原因是因为我正在使用 Box2D 来检查碰撞。我将所有内容除以我的比例 (10.0f),以便物理模拟更加准确,并且可以让玩家移动得更快。

我想知道是否有一种方法可以从浮点位置而不是整数位置获取图 block 。我是否必须停止使用 Box2D 进行碰撞检测?我对此很满意,但我不擅长编写自己的碰撞检测,所以如果是这种情况,我将如何制作自己的碰撞检测?

最佳答案

如果您使用比例来使用 Box2D,那么您需要重新缩放坐标。

如果你的 Sprite 位于像素 100 处,那么它的 box2d 坐标是 10m。 Tiled 需要以像素为单位的坐标,因此只需乘以您的比例即可。

player.sprite.getX() * 比例

当然,可能会有一些带有比例的铸件。

希望这对您有所帮助,如果您还有任何其他问题,请发表评论!

关于java - 如何使用 float 从 libGDX 中的单元格获取图 block 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992874/

相关文章:

java - 使用 GSON 将 json 解析为由列表组成的 pojo

java - 导入gradle项目不会复制内容

c++ - 具有动态位置的 body 节点形状

java - 在 LibGDX 游戏中重用 Box2D 对象(池化)

c++ - Box2D - 我怎么知道 2 个固定装置何时接触?

java - 来自另一个线程的 Graphics.drawImage 不会在 Java Swing 中绘制任何内容

java - 代码覆盖率导致以下问题

java - 如何安全退出 lib gdx 应用程序?

android - libgdx 中的水平滚动 Pane 级别菜单?

java - Apache Camel 路线: onCompletion not reached when exception occurs?