Hallo,
ich versuche gerade am Thema Kollisionserkennung zu arbeiten.
Sowohl in 2D-Spielen als auch in 3D-Spielen.
Hat jemand Vorschläge/Ideen, wie ich das möglichst in leicht verständlichem Code
implementieren könnte, der trotzdem halbwegs schnell ist?
Die Funktion soll 2 Objekte (Spieler, Gegner) als Parameter nehmen und zurückgeben, ob
es eine Kollision gibt (True oder False).
In den Objekten sind Attribute verfügbar, wie x und y-Koordinaten.
Im 2D-Spiel zB x-Koordinate-links, x-Koordinate-rechts, y-Koordinate-oben, y-Koordinate-unten vom Sprite.
Danke für alle Vorschläge (falls jemand gute Artikel im Netz dazu kennt, auch gerne Link posten)
Kollisionserkennung
Hallo.
Das hängt natürlich ganz davon ab, wie genau die Erkennung werden soll. Das einfachste Modell sind Kreise mit Radien ri um die Objekte. Die Objekte 1 und 2 kollidieren dann, wenn die Mittelpunkte der Kreise näher zusammen sind als r1+r2. Meistens reicht dieser Ansatz schon aus.
Der Aufwand für Genauigkeit steigt natürlich spürbar über Bounding Boxen, orientierte Bounding Boxen, Ellipsen/Spähren und Dreiecken/Pixeln. Zu dem Thema wird dir die Suchmaschine deiner Wahl allerdings mehr als genug Treffer liefern.
Sebastian
Das hängt natürlich ganz davon ab, wie genau die Erkennung werden soll. Das einfachste Modell sind Kreise mit Radien ri um die Objekte. Die Objekte 1 und 2 kollidieren dann, wenn die Mittelpunkte der Kreise näher zusammen sind als r1+r2. Meistens reicht dieser Ansatz schon aus.
Der Aufwand für Genauigkeit steigt natürlich spürbar über Bounding Boxen, orientierte Bounding Boxen, Ellipsen/Spähren und Dreiecken/Pixeln. Zu dem Thema wird dir die Suchmaschine deiner Wahl allerdings mehr als genug Treffer liefern.
Sebastian
Das Leben ist wie ein Tennisball.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich habe bisher immer mit Tile-basierten Ansätzen gearbeitet. Aufgrund des zugrunde liegenden Rasters ist es dort fast trivial eine Kollision zu erkennen. Für viele Spiele reicht so was vollkommen aus - hängt aber nun stark von Deiner Idee ab.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert