Kollisionsprüfung mit Rechtecken und Linien

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Kollisionsprüfung mit Rechtecken und Linien

    Hi liebe VB-Paradiseler,

    wage mich momentan an mein erstes Spiel, einen Klon von Sonic the Hedgehog für den Sega Mega Drive.
    Dabei orientiere ich mich am "Sonic Physics Guide"(info.sonicretro.org/Sonic_Physics_Guide), welcher Schritt für Schritt jeden Aspekt der Physics abarbeitet.

    Nun mein Problem:
    Für die Collision Detection nutze ich Sensorlinien, welche Kollision mit den Tiles prüfen(siehe Bild im Anhang).
    Doch wie bewerkstellige ich das Prüfen der Kollision mit einer Linie und einem Rechteck?

    Das Prüfen, ob der Start/Endpunkt im Rechteck sind, ist einfach, doch was wenn beide außerhalb des Rechtecks sind und die Linie trotzdem durch das Rechteck verläuft?

    Hat jemand eine Idee?

    Grüße,
    Cremetoertchen
    Bilder
    • SPGSensors.png

      3,87 kB, 384×128, 135 mal angesehen
    @Mircosofter2206 Da musst Du ein wenig Mathematik machen.
    Zunächat verwendest Du die Methode Rectangle.Contains(Point).
    Wenn die Randpunkte der Linie außerhalb des Rectangles liegen, musst Du den Punkt der Linie (Gerade) berechnen, der sich in der halben Höhe innerhalb des Rectangles befindet.
    Diesen testest Du dann.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die Anforderung ist noch höchst ungenau.
    Zunächstmal: Um welche Datentypen geht es?
    Tatsächlich um System.Drawing.Rectangle?
    Und wie lautet der Datentyp, der eine Linie darstellen soll?

    Die nächste Frage ist, ob nur Senkrechten und Waagerechte vorkommen, oder ob Rechtecke auch gedreht, und Linien schief sein können.