Wykrywanie kolizji poszukiwania optymalnego algorytmu

0

Piszę grę. Bombermana. I mam problem z wykrywaniem kolizji.
Samo sprawdzenie czy zaszła kolizja dwóch obiektów mam zaimplementowane w silniku którego używam (ZenGL) jednak jak napisać wydajny algorytm kolizji który sprawdził by wszystkie obiekty na planszy?

Obiekty mam podzielone na te co się poruszają(potwory i gracz) i te co się nie poruszają(ściany, murki, bonusy, płomień). Obiekty nieruchome leżą zawsze w jednym miejscu którego pozycję można wyliczyć ze wzorów Object.x = stała całkowita * 50px, Object.y = stała całkowita * 50px Ale już obiekty ruchome mogą leżeć w dowolnym punkcie planszy.

Głównie zależy mi na sprawdzaniu kolizji obiektów ruchomych z nieruchomymi. i kolizji płomienia z czymkolwiek.

Czytałem o drzewie czwórkowym ale nie do końca rozumiem idee. A metoda bruteforce strasznie zamula. Ma ktoś jakiś pomysł?

1

Na początek bruteforce z AABB, do takich gier zwyczajowo nie implementuje się bardziej zaawansowanych algorytmów, chyba że masz mapę 50000x50000 bloczków :P
Plus oczywiście niesprawdzanie każdego bloczka dla każdego przeciwnika, tylko samo otoczenie na zasadzie:

For X := Gracz.X-5 To Gracz.X+5 Do
Begin
  For Y := Gracz.Y-5 To Gracz.Y+5 Do
  Begin
    // sprawdzanie czy X,Y mieszczą się w granicach mapy i tak dalej
  End;
End;
0

No tak też o tym myślałem. Tylko jest problem bo, Wszystkie ruszające się obiekty nie mają stricte przypisanego pola na którym się znajdują.
Ten algorytm by pasował przy kolizji z obiektami statycznymi i chyba taki zastosuje. A kolizje obiektów ruchomych zrobię standardowym bruteforce bo obiektów ruchomych będzie maksymalnie 10 + gracz. przy czym przy kolizjach obiektów ruchomych interesują mnie tylko kolizje z graczem :P

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