Kreis-Rechteck-Kollisionsseitenerkennung in libgdx

Ich habe stundenlang nach einer Lösung dafür gesucht: Ich entwickle ein kleines Top-Down-Spiel mit libgdx (vielleicht ist es wichtig, welche Engine ich benutze). Jetzt muss ich die Kollisionserkennung zwischen meinem Charakter (Kreis) und der Wand (Rechteck) implementieren. Ich möchte, dass der Charakter bei einer Kollision an der Wand entlang gleitet, wenn dies möglich ist. Lassen Sie mich erklären:

Wenn ich mich um 45 Grad nach oben bewege, kann ich mit dem Ab, der linken oder der Ecke einer Wand kollidieren.Wenn ich mit der linken Seite kollidiere, möchte ich die X-Bewegung stoppen und mich nur nach oben bewegen. Wenn ich die Wand verlasse, möchte ich weiter nach oben gehen. Das gleiche mit der Unterseite (Stop Y-Bewegung)Wenn ich mit der Ecke kollidiere, möchte ich die Bewegung stoppen (Rutschen nicht möglich).

Was ich eigentlich tue, ist zu überprüfen, ob die linke Linie des Rechtecks meinen Kreis schneidet. Dann überprüfe ich den Schnittpunkt zwischen der linken Wandlinie und meinem Kreis und der unteren Wandlinie und meinem Kreis. Je nachdem, welche Kreuzung auftritt, setze ich die x / y-Position meines Kreises zurück und setze die x / y-Geschwindigkeit auf 0. Das Problem ist, dass meistens nicht aKollision bt anÜberlappung vorkommt. Der Bottom Check liefert also true, auch wenn der Kreis in Wirklichkeit nur mit dem rechten kollidieren würde. In diesem Fall würden beide Kreuzungstests true zurückgeben und ich würde beide Geschwindigkeiten wie bei der Eckenkollision zurücksetzen. Wie kann ich dieses Problem lösen? Gibt es eine bessere Möglichkeit, Kollisionen und Kollisionsseiten oder -ecken zu erkennen? Ich brauche nicht den genauen Kollisionspunkt, sondern nur die Seite des Rechtecks.

Bearbeiten: Ich muss sagen, dass die Rechtecke nicht nur parallel zur x-Achse gedreht werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage