Wykrywanie kolizji Circle-Rectangle w libgdx

Spędziłem wiele godzin szukając rozwiązania tego problemu: opracowuję małą odgórną grę z libgdx (może to ma znaczenie, jakiego silnika używam). Teraz muszę zaimplementować wykrywanie kolizji między moją postacią (okręgiem) a ścianą (prostokąt). Chcę, aby postać ześlizgiwała się po ścianie w razie kolizji, jeśli możliwe jest przesuwanie. Pozwól mi wyjaśnić:

Jeśli poruszam się o 45 stopni w górę, mogę zderzyć się z dolną, lewą lub narożną ścianą.Jeśli zderzę się z lewą, chcę zatrzymać ruch X i poruszać się tylko w górę. Jeśli opuszczę mur, chcę iść dalej. To samo z dolną stroną (zatrzymaj ruch y)Jeśli zderzę się z rogiem, chcę zatrzymać ruch (nie można przesuwać).

W rzeczywistości sprawdzam, czy lewa linia prostokąta przecina mój krąg. Następnie sprawdzam przecięcie między lewą linią ściany i moim okręgiem a dolną linią ściany i mojego okręgu. W zależności od występującego przecięcia ustawiam pozycję x / y mojego okręgu i ustawiam prędkość x / y na 0. Problem polega na tym, że najczęściej niekolizja bt anzakładka zdarza się. Tak więc dolne sprawdzenie zwraca prawdę, nawet jeśli w rzeczywistości krąg kolidowałby tylko z prawą. W tym przypadku oba testy skrzyżowania zwrócą prawdę, a ja zresetuję obie prędkości, tak jak w przypadku kolizji Narożnik. Jak mogę rozwiązać ten problem? Czy jest lepszy sposób na wykrycie kolizji i kolizji? Nie potrzebuję dokładnego punktu zderzenia z boku prostokąta.

Edytować: Muszę powiedzieć, że prostokąty nie są obracane tylko równolegle do osi x.

questionAnswers(2)

yourAnswerToTheQuestion