Problem z usunięciem obiektu

0

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ł :)

0

No ok, chyba jednak moje niedopatrzenie :) Chyba poznałem odpowiedź, ale prosiłbym o potwierdzenie czy dobrze myślę :)

Wydaje mi się, że nie można usunąć obiektu, przekazanego metody, prawda?

Spróbuję użyć zmiennej boolean, żeby zapisywała ewentualną chęć usunięcia, a samo usunięcie zrobię poza pętlą :) Czy jakiś lepszy sposób na to jest?

0

Ja bym napisał metodę sprawdzKolizje() w klasie Pocisk. I sprawdzał tak:

   pocisk.sprawdzKolizje();

W Twoim kodzie sprawdzKolizje(pocisk) są dwie referencje do tego samego pocisku: zmienna pocisk i zmienna lokalna proc metody sprawdzKolizje(), Ty "zerujesz" tylko jedną z nich, tę mniej ważną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1