Rozwijam mały silnik do gier 2D. Znaki mają metodę malowania, która obecnie wykonuje następujące czynności:
- Oblicz nową pozycję postaci według jej prędkości itp.
- Zaktualizuj komórkę siatki kolizyjnej **
- Narysuj postać na nowej pozycji
** Utworzyłem siatkę kolizyjną, aby zmniejszyć liczbę kontroli skrzyżowań
Podstawowym algorytmem, który myślałem o wykrywaniu kolizji, jest:
For Each Character
Check intersection with characters in surrounding 8 cells
Mogę po prostu umieścić ten kod w metodzie malowania. Ale oto problem, który przewiduję.
Załóżmy, że dwa znaki A i B leżą w sąsiednich komórkach w siatce kolizyjnej. Teraz zgodnie z powyższym algorytmem w iteracji znaku A wykryje, że zderzył się z B. W iteracji znaku B wykryje, że zderzył się z A.
Mam jednak pomysł, że gdy A wykryje, że zderzył się z B, powinien poinformować B, że zderzył się z A. To zaoszczędziłoby wielu porównań, gdy zderza się więcej niż 2 aktorów. Ale nie jestem pewien, jak sobie z tym poradzić. Myślę, że zamiast każdej postaci sprawdzającej kolizję, powinienem sprawdzić kolizję w pętli gry.
Czy takie podejście byłoby prawidłowe? Jak poradziłeś sobie z tego rodzaju problemem? Sam pomyślałem o siatce kolizyjnej. Czy są jakieś alternatywy dla logiki siatki kolizji?