wlochaty7 Napisano Maj 10, 2009 Zgłoś Share Napisano Maj 10, 2009 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.