我目前正在制作一款游戏。这是一款基于 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/