Problem z kolizją

0

Witam.
Jestem w trakcie pisania gierki w której muszę wykorzystać kolizje. Ogólnie z tym nie mam problemu, bo znalazłem fajny tutorial ale pojawił się inny kłopot.
Kolizję rozwiązuje przy pomocy prostokątów i metody intersect. Coś mniej wiecej tak:

Rectangle playerBounds = player.getBounds();
for(int i=0;i<walls.size();i++){
            Actor a1 = (Actor)walls.get(i);
            Rectangle r1 = a1.getBounds(); //getBonds() zwraca prostokąt na podstawie wysokości i szerokości grafiki
            if (r1.intersects(playerBounds)) {
                player.collision(a1);
                break;
            }            
        }

U góry akurat są to kolizje gracza ze ścianami.
Problem jest następujący: mam również obiekty które w swoim ruchu obracają się o pewien kąt (dokłądnie są to kamery które są umieszczone w kątcie pomieszczenia i "pilnują" danego obaszaru). Niestety w ich wypadku powyższa metoda nie działa do końca ponieważ tworzony prostokąt r1 jest zawsze tylko pozycją początkową w której ładuje początkowo grafikę kamery. Nie mam pomysłu jak uwzględnić kąt obrotu kamery przy wykrywaniu kolizji w powyższy sposób (jeśli w ogóle się da) i tu potrzebowałbym czyjejś rady.
Z góry dzięki za pomoc.

0

możesz to zrobić za pomocą maski, czyli wczytujesz sobie do pamięci obrazek(zależnie jak pada kamera) np. tam gdzie ona widzi wypełniasz czerwonym, jak zmieni położenie to aktualizujesz obrazek, który masz zapisany w pamięci.
kolizje wykrywasz za pomocą porównania koloru pixela(getPixel..) o współrzędnych położenia Twojego obiektu z kolorem maski. Jeśli się pokryją mamy kolizję :)

0

To są właśnie ograniczenia tej metody. Można oczywiście tak jak podał kolega wyżej, ale czasem wypełnianie nierównego obszaru pikselami jest tak samo (lub bardziej) kosztowne niż metody obliczeniowe. Jednym z rozwiązań jest użycie prostokątów wpisanych w nieregularny kształt (wyliczonych na bieżąco) i porównywanie intersekcji całych ich serii (jest to i tak dość mało kosztowne).

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