¨
Я создаю игру с боковым скроллером в Libgdx, и я только что реализовал обнаружение столкновений, но когда я сталкиваюсь с объектом, между игроком и блоком возникает разрыв.Если игрок находится на левой стороне TiledMap, то при столкновении с правой стороны будет пробел, и если он находится на правой стороне TiledMap (около 100 плиток справа), будет пробел, еслиигрок сталкивается с левой стороной.Вот мой метод обнаружения столкновений:
public boolean doesRectCollideWithMap(float x, float y, int width, int height) {
if (x < 0 || y < 0 || x + width > getPixelWidth() || y + height > getPixelHeight())
return true;
for (int row = (int) (y / TileType.TILE_SIZE); row < Math.ceil((y + height) / TileType.TILE_SIZE); row++) {
for (int col = (int) (x / TileType.TILE_SIZE); col < Math.ceil((x + width) / TileType.TILE_SIZE); col++) {
for (int layer = 0; layer < getLayers(); layer++) {
TileType type = getTileTypeByCoordinate(layer, col, row); //Gets a tile by its coordinate
if (type != null && type.isCollidable())
return true;
}
}
}
return false;
}
Это используется в моем суперклассе Entity, который:
protected void moveX(float amount){
float newX = this.pos.x + amount;
if(!map.doesRectCollideWithMap(newX, pos.y, getWidth(), getHeight())){
this.pos.x = newX;
}
}
Есть идеи, как это исправить?