如何使用浮点数从 libGDX 中的单元格获取图块的位置?
How can I get the location of a tile from a cell in libGDX using floats?
我目前正在制作游戏。这是一款基于 2D 瓷砖的游戏。我试图做到这一点,当你踩到水上时,你的球员的速度和体型都会发生变化。
我是运行这个每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.getTileTypeByCoordinate(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
),以便物理模拟更加准确,并且我可以让玩家移动得更快。
我想知道是否有办法从浮动位置而不是整数位置获取图块。我是否必须停止使用 Box2D 进行碰撞检测?我对此很好,但我对编写自己的碰撞检测程序没有任何好处,所以如果是这种情况,我将如何自己制作?
如果您使用比例尺来使用 Box2D,那么您将需要重新缩放您的坐标。
如果您的精灵位于像素 100,则它的 box2d 坐标为 10m。 Tiled 需要以像素为单位的坐标,因此只需乘以您的比例即可。
player.sprite.getX() * scale
当然可能会有一些与比例有关的铸造。
希望这对您有所帮助,如果您有任何其他问题,请发表评论!
我目前正在制作游戏。这是一款基于 2D 瓷砖的游戏。我试图做到这一点,当你踩到水上时,你的球员的速度和体型都会发生变化。
我是运行这个每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.getTileTypeByCoordinate(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
),以便物理模拟更加准确,并且我可以让玩家移动得更快。
我想知道是否有办法从浮动位置而不是整数位置获取图块。我是否必须停止使用 Box2D 进行碰撞检测?我对此很好,但我对编写自己的碰撞检测程序没有任何好处,所以如果是这种情况,我将如何自己制作?
如果您使用比例尺来使用 Box2D,那么您将需要重新缩放您的坐标。
如果您的精灵位于像素 100,则它的 box2d 坐标为 10m。 Tiled 需要以像素为单位的坐标,因此只需乘以您的比例即可。
player.sprite.getX() * scale
当然可能会有一些与比例有关的铸造。
希望这对您有所帮助,如果您有任何其他问题,请发表评论!