Cześć, napisałem taką pętlę for, która sprawdza obszra wokół postaci czy jest w kolizji, z którymś z wybranych kafelków. Działa to mniej więcej na zasadzie, że gdy chcemy pzresunąć postać do przodu to wpierw sprawdza czy po przesunięciu będzie kolizja , jeżeli nie to ustawia nowe współrzędne postaci, jeżeli tak to wtedy pozostaje na wcześniejszym miejscu.
Pętla dobrze zauważa kolizje ale nie reaguje na nie w każdym przypadku jak powinna. Gdy naprzykład idzie się do góry, to kolizje widzi tak jak powinna czyli na styku postaci, a kafli, ale reaguje na nie czyli zatrzymuje się dopiero gdy pojade dalej do góry i dolna krawędź zauważy kafel.
int t1=0;
int t2=0;
if(bohater.dy>0)t2+=2;
if(bohater.dy<0)t2-=2;
if(bohater.dx>0)t1+=2;
if(bohater.dx<0)t1-=2;
double s1=bohater.getX();
double s2=bohater.getY();
double nastepny_x=bohater.getX()+t1;
double nastepny_y=bohater.getY()+t2;
double pierwszy_x=Math.max((nastepny_x/64)-1,0);
double ostatni_x=Math.min((nastepny_x/64)+(bohater.getWidth()/64)+1,mapa.szerokosc_mapy());
double pierwszy_y=Math.max((nastepny_y/64)-1,0);
double ostatni_y=Math.min((nastepny_y/64)+(bohater.getHeight()/64)+1,mapa.wysokosc_mapy());
for (double y=pierwszy_y;y<ostatni_y;y++)
{
for(double x=pierwszy_x;x<ostatni_x;x++)
{
Kostka kostka = mapa.zwroc_plytke((int)x,(int)y);
if(kostka.intersects(nastepny_x,nastepny_y,128,128) && kostka.zwroc_indeks_grafiki()==1)
{
bohater.ustaw(s1,s2);
}
else if(!kostka.intersects(nastepny_x,nastepny_y,128,128) && kostka.zwroc_indeks_grafiki()!=1) bohater.ustaw(nastepny_x,nastepny_y);
}
}
Gdzie jest błąd, którego nie widze, a którego usunięcie naprawiło by działanie tej metody ?