Załóżmy, że używam prostego systemu dyskretnego wykrywania kolizji, w którym przesuwam wszystkie obiekty, a następnie sprawdzam kolizje. Chcę, aby wszelkie kolidujące obiekty zostały oddzielone (oczywiście) i przypisane im odpowiednie prędkości reakcji (odbicie, przesuwanie, zatrzymanie itp.).
Kiedy mam parę zderzających się obiektów, jak mogę je rozdzielić, nie powodując kolizji jednego lub obu z innymi obiektami?
Jedynym sposobem, aby temu zapobiec, jest przede wszystkim zapobieganie penetracji. Przed przeniesieniem obiektu upewnij się, że jest to legalny ruch. Pamiętaj, że oznacza to, że musisz przesuwać swoje obiekty po kolei, aby uniknąć sytuacji, w której dwa obiekty będą się do siebie poruszały.
Jeśli nie dojdzie do penetracji, nie musisz resetować żadnych pozycji, a zatem nie uruchomisz żadnych dodatkowych penetracji.
źródło
Zwykle robię to:
Kiedy oddzielasz obiekty i kończysz się kolejnymi kolizjami, po prostu iterujesz ponownie, aż osiągnięta zostanie maksymalna liczba kroków lub obiekty przekroczą ustalony próg.
źródło