Wie funktioniert eine Kollisionsabfrage eigentlich in der Theorie?
-
Hallo,
ich hab mich mal gefragt: Wie funktioniert eine Kollisionsabfrage eigentlich in der Theorie.
Also ich hab das immer so gemacht:
Durch eingabe mit der Tastatur(Pfeiltasten) kann ich einen Gegenstand im Spiel um die festgelegte entfernung bewegen. dann wird mit dieser Gegenstand mit allen Objekten überprüft ob es sich in diesem Objekt befindet(in meiner neusten Überlegung werden nur die Objekte überprüft, die in unmittelbarer Umgebung liegen.). Wenn sich der gegenstand im Objekt befindet wird wieder nachgeguckt welche Richtung die Pfeiltasten gedrückt wurde und der Gegenstand wird in die entgegengesetzte Seite an das Objekt gelegt.Soweit die Theorie... meist klappt das ja. auzer wenn sich der gegenstand durch einen Effekt so schnell bewegt das er Größere Bewegungen macht als das Objekt mit dem er kollidieren sollte Groß ist, überspringt er es einfach.
Ist meine Art der Kollisionabfrage weitgehend richtig oder hab ich da vollkommen Falsch gedacht?
-
Falsch gedacht nicht... aber wenn du es so machst, dann hast du eben das von dir beschriebene Problem.
Ein primitiver Ansatz ist es, die Bewegung aufzuteilen, so dass man nicht einmal eine Bewegung um x Einheiten macht, sondern sich z.B. x mal eine Einheit fortbewegt. Dazwischen machst du jedesmal eine Kollisionsabfrage.
Falls keine Performanzgründe dagegen sprechen, ist das eine einfache Lösung.
-
Zerod schrieb:
Ist meine Art der Kollisionabfrage weitgehend richtig oder hab ich da vollkommen Falsch gedacht?
Kommt halt auch ein wenig drauf an, was für Kollisionsalgorithmen du verwendest, da gibt es so viele verschiedene. Grundsätzlich wäre auch noch eine Möglichkeit, die Bahngerade(n) auf Schnitt mit den Kanten des Kollisionsobjekts zu untersuchen.
Zerod schrieb:
Wenn sich der gegenstand im Objekt befindet wird wieder nachgeguckt welche Richtung die Pfeiltasten gedrückt wurde und der Gegenstand wird in die entgegengesetzte Seite an das Objekt gelegt.
Damit bist du aber nicht besonders flexibel. Was machst du, wenn zwei Tasten gleichzeitig gedrückt werden (diagonale Fortbewegung)? Oder wenn eine Kollision nicht auf Spielereingabe zurückzuführen ist (Kräfte von aussen, oder Hindernis verursacht Kollision)?
Du kannst dir auch mal das anschauen:
http://www.metanetsoftware.com/technique/tutorialA.html
-
Nexus schrieb:
Grundsätzlich wäre auch noch eine Möglichkeit, die Bahngerade(n) auf Schnitt mit den Kanten des Kollisionsobjekts zu untersuchen.
Das funktioniert natürlich nur, wenn das andere Objekt stationär ist. Mir würde da einfallen, für jedes Objekt den Raum zu bestimmen, den es während eines Zeitschrittes (bei stetig angenommener Bewegung) einnimmt, damit grob Kollisionskandidaten zu ermitteln und dann nochmal nachzurechnen, ob es wirklich zu einer Kollision kommt.