Sprawdzanie czy bohater styka się z każdym obiektem podczas renderowania, byłoby czasochłonne dlatego musisz ograniczyć widzenie. W przypadku gdy obiekt jest ograniczony okregiem (a robi się tak dla wiekszości obiektów) wystarczy sprawdzić, czy odległość między dwoma obiektami jest mniejsza niż suma ich promieni, jeżeli tak to mamy zderzenie. Dla obiektów kafelkowych, jest to jeszcze łatwiejsze, bo poruszamy się tylko po ustalonych kafelkach. Sprawdzasz czy na kaflu do którego chcesz przejść istnieje jakiś przedmiot, jeżeli tak, to nie zezwalasz na poruszanie się, jeżeli nie, to dopiero teraz wykonujesz ruch.
Nie wytłumaczyłem tego do końca:
Pobierasz jeden punkt kafelka (może to być domyślnie lewy górny róg)
if(hero.getX() + length >= block.getX())
return /*kolizja*/ true;
else if(hero.getX() <= block.getX() + length) // zakladam że dlugosc kafla blokady jest tak samo dluga jak dlugosc kafla bohatera, tak powinno byc w domysle)
return true;
else if(hero.getY() >= block.getY() - length)
return true;
else if(hero.getY() - length <= block.getY())
return true;
else
return false;
Dla małej ilości obiektów opłaca się sprawdzać każdy obiekt podczas renderowania, natomiast dla większej, najpierw ustal w jakiej odległości od bohatera będziesz sprawdzał kolizję obiektów