Я пытаюсь разработать Tiled 2D-игру на Java. Карта представляет собой сетку, где все плитки имеют размер 48x48 (как и игрок).
Я не хочу перебирать все плитки на карте, чтобы проверить, сталкивается ли игрок. Я пытаюсь заставить игрока проверять только ближайшие блоки, для каждого движения, которое он делает, основываясь на «твердом» логическом флаге из блока.
Проблема, с которой я сталкиваюсь: игрок свободно перемещается. Он может быть между 2 блоками.
Как я могу реализовать этот метод на основе размера блока, позиции игрока и окружающего индекса?
Изображение сценария
Это самое близкое, что я мог получить:
public void checkCollisionWhenMoving() {
for (int i = (player.y / 48) - 2; i <= 4; i++) {
for (int j = (player.y / 48) - 2; j <= 4; ++j) {
if (blocksMap[i][j].isBlocked()) {
collisionDetector.checkCollision(player.getCollisionBox(),
blocksMap[i][j].getCollisionBox());
}
}
}
}
Я не хочу думать о самом коллизии (коллизии AABB и т. Д.), А просто о том, как зациклить метод коллизии для всех ближайших окружающих блоков.
Если вам нужно больше кода, дайте мне знать.