Erkennen die Kollision zwischen einem bewegten Objekt und einem unbeweglichen man
Zunächst, meine Frage ist nicht wirklich spezifisch für C# oder XNA, aber meine code-Beispiele verwenden diese.
Ich bin versucht derzeit, um ein Pong-Klon und ich habe ein problem mit der Kollisionserkennung.
Jedes Objekt im Grunde hat eine bestimmte Geschwindigkeit(das ist ein Vector2), Position(Vector2, auch) und Geschwindigkeit(nur Schwimmer). Bei jedem Update () - Aufruf an das Objekt, die position wird verändert auf diese Weise:
Velocity.Normalize();
Position += Velocity * Speed;
Zuerst habe ich nur überprüft, wenn es derzeit zu einer Kollision zwischen zwei Objekten mit einem einfachen Intersects () - Aufruf aus der Rechtecke der Objekte. Ich merkte schnell, dass ich konnte nicht nur prüfen, ob das Objekt wurde derzeit Kollision mit einem anderen, sondern ob das Objekt kollidierte mit einem Objekt auf seinem Weg. Nur die überprüfung, ob zwei Objekte wurden zur Zeit der Kollision aus den ball gehen durch das Paddel, wenn die Geschwindigkeit zu hoch war.
Ich verschiedene Sachen ausprobiert um das problem zu beheben, aber keiner von Ihnen schien zu funktionieren. Ich brauche nur eine Möglichkeit um zu überprüfen, ob zwei Objekte zusammengestoßen und auf Ihre Weise, und wenn Sie es Taten, wenn es von der horizontal, vertikal oder beides(um die Kugel die Geschwindigkeit entsprechend).
Ich nicht unbedingt wollen, dass die Lösung richtig Weg, vielleicht auch nur die grundlegende Idee, wie dies umzusetzen, und das werde ich code es selber.
Vielen Dank für Ihre Zeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Separating Axis Theorem ist dein Freund 🙂
http://www.codeproject.com/KB/GDI-plus/PolygonCollision.aspx
Als Ausgangspunkt, dann schau mal hier.
http://www.flipcode.com/archives/Theory_Practice-Issue_01_Collision_Detection.shtml
Dies ist eine sehr gute Einführung über all die verschiedenen Kollisions-Möglichkeiten. Vielleicht ist Ihr Fall wird hier erklärt.
Ich denke, dieser link: http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php könnte das sein, was du bist suchen für. Es beschreibt die sphere-plane-sweep-test, nützlich, wenn Sie schnell bewegte Objekte, die passieren kann, ein Flugzeug innerhalb einer ein-frame-Intervall.
Es gibt Sie den Schnittpunkt sowie, die Sie verwenden können, um entsprechend Ihrer Flugbahn über der Ebene, die senkrecht und weiter den Pfad des Objekts.
Sie, dass Sie problem mit der Tatsache, dass, wenn ein Objekt ist zu schnell, kann es passieren das immobile Objekt vor einem
Update()
heißt mit der Erkennung (wie es geht durch den unbeweglichen Objekt).Verlängern die Form des Objekts entlang der bewegen Vektor mit der Größe der Geschwindigkeit:
Platz
[0,0][2,2]
mit der Geschwindigkeit[1,0]
und Geschwindigkeit10
erstellen eine Form von Rechteck[0,0][12,2]
=> es ist jetzt an Position coords[0,0]
mit Größe[12,2]
.Nun durchschnitten das Rechteck mit dem unbeweglichen Objekt. Jetzt wissen Sie, wenn Sie kollidierten.
Wenn die zwei point-Objekte haben die gleiche position haben, dann haben Sie kollidierte.