Skocz do zawartości

[java] Pętla for dobrze zauważa, ale źle reaguje na kolizje


Polecane posty

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 ?

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...