Я сейчас делаю игру. Это игра, основанная на 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
), чтобы симуляции физики были более точными, и я мог заставить игрока двигаться быстрее.
Мне было интересно, есть ли способ получить плитку из местоположения с плавающей запятой вместо местоположения int. Придется ли мне прекратить использовать Box2D для обнаружения столкновений? Меня это устраивает, но я не умею программировать собственное обнаружение столкновений, поэтому, если это так, как мне сделать свое собственное?