Laden...

Suche Tutorial: Einfache (?) Kollisionen / Stöße im 2D-Raum

Erstellt von winSharp93 vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.432 Views
winSharp93 Themenstarter:in
5.742 Beiträge seit 2007
vor 13 Jahren
Suche Tutorial: Einfache (?) Kollisionen / Stöße im 2D-Raum

Hallo zusammen,

derzeit werfe ich einen vorsichtigen Blick in Richtung Spieleprogrammierung. Nichts Großes, ich beschränke mich vorerst mal auf das zweidimensionale mit GDI+ (Performance spielt eher eine untergeordnete Rolle - ob je ein fertiges Produkt entsteht, ist sowieso fraglich 😁 ).

Nun stehe ich vor dem Problem der Kollsionsabfragen:
Die "Objekte" im Spiel beschränken sich zur Zeit auf bewegte Rechtecke und Kreise.
Herausfinden, wann eine Kollision eintritt, kann ich leicht - aber was passiert dann?

Ein Beispiel:
Ist das Rechteck unbewegt und ein Kreis trifft auf, gilt ja Einfallswinkel = Ausfallswinkel.
Was aber, wenn sich das Rechteck bewegt? Oder der Kreis die Ecke des Rechtecks trifft? Was hat das für Auswirkungen auf Richtung und Geschwindigkeit? Wie stelle ich so etwas einfach im Code fest?
Irgendwas scheint das mit Impuls, Schwerpunkten, usw. zu tun zu haben...

Daher bin ich nun auf der Suche nach einem Tutorial / einer Formelsammlung, die mir solche Fragen beantworten kann.
Was ich bisher gefunden habe, ist entweder eine Stufe zu komplex (3-D Objekte, die aus Polygonen aufgebaut sind), oder nicht weitgehend genug á la "Ein Rechteck und ein Kreis sind kollidiert, sobald der Abstand kleiner des Radius ist".

Hat jemand zufällig ein gutes Tutorial (Sprache egal, vorzugsweise keine konkrete Sprache, sondern nur Formeln) zu diesem Thema parat?
Wie gesagt: Bewegte und unbewegte Kreise und Rechtecke reichen völlig aus, sollten aber auch tatsächlich behandelt werden.

Danke im Voraus!

Gruß
winSharp93

C
2.122 Beiträge seit 2010
vor 13 Jahren

Such mal nach "Impulserhaltung".
Generell gilt bei einem Stoß dass die Summe aus Masse x Geschwindigkeit für alle Objekte vorher und nachher gleich ist. Das ganze ist dabei ein Vektor, das heißt die Richtung dieses Summenvektors ist die selbe.

winSharp93 Themenstarter:in
5.742 Beiträge seit 2007
vor 13 Jahren

Danke für die Antwort!

Such mal nach "Impulserhaltung".

Ja - das ist mir ein Begriff. Nur reicht es IMHO leider nicht aus, um alle Kollisionen zwischen "Kreisen" und "Rechtecken" zu berechnen - gerade, wenn man z.B. Ein Ball mit einer Ecke kollidiert.

Das ganze ist dabei ein Vektor, das heißt die Richtung dieses Summenvektors ist die selbe.

Aber welche Richtungen haben dann z.B. beiden resultierenden Vektoren?
Was ist, wenn sich nur ein Objekt bewegt (das sich hinterher auch nicht bewegen soll, d.h. irgendwo "festgemacht" ist)?

Daher bin ich schon eher auf der Suche nach einem wirklichen Tutorial - vielleicht hat zufällig noch jemand einen Link zu einem, dass er als empfehlenswert erachtet.

Inzwischen habe ich auch ein Java-Applet gefunden (glücklicherweise mit Sourcecode), das zumindest mal die Kollision zweier "Kreise" (oder Kugeln - das klingt aber immer gleich so dreidimelnsional 😉 ) simuliert.
Ich schaue mir das mal genau an.

R
68 Beiträge seit 2010
vor 13 Jahren

Hallo zusammen,

derzeit werfe ich einen vorsichtigen Blick in Richtung Spieleprogrammierung.
Nichts Großes, ich beschränke mich vorerst mal auf das zweidimensionale mit
GDI+ (Performance spielt eher eine untergeordnete Rolle - ob je ein fertiges
Produkt entsteht, ist sowieso fraglich 😁 ).

Schau Dir mal das 2D Tutorial von Riemer Grootjans an:

http://www.riemers.net/

Damit habe ich es gelernt und einen Shooter daraus gebaut. 😁
Ist zwar für XNA/DirectX aber die mathematischen Grundlagen sind wohl die
gleichen. Wenn Du mit dem Gedanken spielst, solltest Du evtl. überlegen,
gleich mit dem XNA Framework zu arbeiten. Das macht das Leben deutlich
einfacher.

Robin