Witam,
Mam pewien problem. Mam metodę sprawdzKolizjePocisku(), do której wchodzę w następujący sposób:
if (pocisk != null) {
pocisk.przemieszczajPocisk();
sprawdzKolizjePocisku();
}
Metoda ta sprawdza mi kolizje pocisku, z obiektem w ten sposób:
private void sprawdzKolizjePocisku() {
for(int p = 0; p < 40; p++) {
if (przeszkoda[p] != null) {
for(int s = 0; s < 50; s++) {
if ((pocisk != null) && (pocisk.getWspX() == przeszkoda[p].getWspX() + s)) {
for(int t = 0; t < 50; t++) {
if ((pocisk != null) && (pocisk.getWspY() == przeszkoda[p].getWspY() + t)) {
przeszkoda[p] = null;
pocisk = null;
wynik.dodajPunkty(10);
}
}
}
}
}
}
}
W ten sposób działa to wyśmienicie. Wiadomo o co chodzi - według współrzędnych, jeżeli pocisk jest na tym samym X co inny obiekt, wtedy sprawdzam czy jest również na tym samym Y. Jeżeli występuje kolizja - usuwam przeszkodę, oraz usuwam pocisk.
Problem w tym, że ten kod działa dla jednego obiektu klasy Pocisk, o nazwie pocisk. Chciałbym teraz dodać kilka innych obiektów klasy pocisk i sprawdzać kolizję w tej metodzie, więc zmieniam kod na taki, który przekazuje obiekt do metody sprawdzKolizjePocisku():
if (pocisk != null) {
pocisk.przemieszczajPocisk();
sprawdzKolizjePocisku(pocisk);
}
private void sprawdzKolizjePocisku(Pocisk poc) {
for(int p = 0; p < 40; p++) {
if (przeszkoda[p] != null) {
for(int s = 0; s < 50; s++) {
if ((poc != null) && (poc.getWspX() == przeszkoda[p].getWspX() + s)) {
for(int t = 0; t < 50; t++) {
if ((poc != null) && (poc.getWspY() == przeszkoda[p].getWspY() + t)) {
przeszkoda[p] = null;
poc = null;
wynik.dodajPunkty(10);
}
}
}
}
}
}
}
Niestety, jeżeli napiszę tak jak powyżej - przeszkoda się usuwa, ale pocisk nie! No i leci dalej i dalej i dalej... Myślę, że albo to jest moje jakieś niedopatrzenie, albo gdzieś jest kruczek o którym nie mam pojęcia...
Mógłby mi to ktoś wyjaśnić?
Bardzo bym o to prosił :)