Существует много способов решения этой проблемы, но я думаю, что для того, что вы делаете, лучшим способом было бы использовать движок плиток. В прошлом это часто использовалось в подобных играх (например, в любой RPG на SNES), и это дает вам быстрые и простые средства как для создания уровня / карты, так и для обнаружения столкновений.
Основная концепция движка плиток состоит в том, что объекты хранятся в двумерном массиве, и когда ваш игрок (или любой другой движущийся игровой объект) пытается перейти в новую плитку, вы выполняете простую проверку, чтобы увидеть, находится ли объект в этом плитка доступна или нет (например, если это трава, игрок может двигаться; если это сундук с сокровищами, игрок не может двигаться). Это значительно упростит проверку на коллизии (поскольку наивная проверка списка сущностей будет иметь производительность O (n ^ 2)). Эта картинка может дать вам представление о том, о чем я говорю. Линии были добавлены, чтобы проиллюстрировать точку, но, конечно, когда вы играете в игру, вы не воспринимаете все активно как отдельные элементы размером 32x32 пикселя.
Хотя у меня лично нет опыта работы с движками плиток в Java, похоже, Mappy поддерживает Java, и я слышал хорошие вещи о PulpCore . Конечно, вы более чем можете создать свой собственный двигатель, но вы должны решить, лучше ли потратить свои силы на переизобретение колеса (но, конечно, тогда это будет ваше колесо, и это довольно приятно) или потратьте время на создание лучшей игры.