Frage

Was ist der beste Weg, Kollisionen in einem 2D-Spiel Sprites zu erkennen? Zur Zeit arbeite ich in allegro und G ++

War es hilfreich?

Lösung

Es gibt eine Fülle von Möglichkeiten, die Kollisionserkennung zu erfassen. Die Methoden werden Sie verwenden leicht verändert, wenn je nachdem, ob Ihr eine 2D- oder 3D-Umgebung. Denken Sie auch daran, wenn ein Kollisionserkennungssystem zur Einführung, zu berücksichtigen, alle Physik Sie können im Spiel (benötigt für die meisten Abstieg 3D-Spiele) implementieren, um die Realität der es zu verbessern.

Die kurze Version ist Begrenzungsrahmen zu verwenden. Oder mit anderen Worten, macht jede Einheit in der Welt ein Feld, dann prüfen, ob jede der Achsen der Box mit anderen Einrichtungen kollidieren.

Bei großen Mengen von Entitäten für Kollisionen testen können Sie in einem Octree überprüfen möchten. Sie würde die Welt in Sektoren einfach teilen, dann überprüfen Sie nur für eine Kollision zwischen Objekten in den gleichen Sektoren.

Für mehr Ressourcen können Sie auf Sourceforge gehen und für die Einschuss Dynamik Suchmaschine, die ein Open-Source-Kollisionserkennung und Physik-Engine, oder Sie können überprüfen http://www.gamedev.net , die viele Ressourcen auf reichlich Spielentwicklung Themen hat.

Andere Tipps

Jede anständige 2D-Grafikbibliothek wird entweder eine eigene Kollisionserkennungsfunktionen für alles von ausgerichtet Sprites Polygone Pixel bieten, oder einen oder mehrere gute Bibliotheken von Drittanbietern, diese Funktionen auszuführen. Die Wahl des Motor / Bibliothek / Rahmen Ihre Kollisionserkennung Entscheidungen diktieren sollte, da sie wahrscheinlich weit mehr als optimiertem sind, was Sie alleine produzieren könnten.

Für Allegro gibt es Collegro . Für SDL gibt es SDL_Collide.h oder SDL-Collide . Sie können verwenden I_COLLIDE mit OpenGL. Darkbasic hat in Kollisionssystem eine integrierte und DarkPhysics für sehr genaue Interaktionen einschließlich Kollisionen.

Verwenden Sie eine Bibliothek, empfehle ich Box2D

Diese Frage ist ziemlich allgemein. Es gibt viele Möglichkeiten, um die Kollisionserkennung in einem 2D-Spiel zu gehen. Es würde helfen, zu wissen, was Sie zu tun versuchen.

Als Ausgangspunkt ist, dass recht einfache Methoden, die für die Erkennung zwischen den Kreisen ermöglichen, Rechtecken, etc. Ich bin kein großer Fan von gamedev.net, aber es gibt einige gute Ressourcen dort über diese Art der Detektion. Ein solcher Artikel ist hier . Es umfasst einige grundlegende Material, das Sie beginnen könnte helfen.

Grund 2d Spiele können Rechtecke oder Kreise verwenden, um „einschließen“ ein Objekt auf dem Bildschirm. Der Erfassung, wenn Rechtecke überlappen oder wenn Kreise überlappen ist ziemlich straightfoward math. Wenn Sie etwas komplizierter (wie konvexe artibrary Polys) benötigen, dann ist die Lösung komplizierter. Wieder gamedev.net könnte hier eine Hilfe sein.

Aber wirklich Ihre Frage zu beantworten, müssen wir wissen, was Sie zu tun versuchen? Welche Art von Spiel? Welche Art von Objekten versuchen Sie zu kollidieren? Sind Sie versuchen, mit Bildschirm Grenzen kollidieren, etc.

Implementierung eines Kollisionserkennungssystem ist eine komplizierte Angelegenheit, aber Sie wollen drei Punkte berücksichtigen.

  • Welt der Objekte. Raumaufteilung. Wenn Sie eine Kollisionsprüfung gegen jeden 2d Sprit in Ihrer Welt gegen alles anderem tun, haben Sie ein langsames langsames Programm! Sie müssen Prioritäten setzen. Sie müssen den Raum partitionieren. Sie können ein rechtwinkliges Raster-System verwenden und in Scheiben schneiden Sie Ihre Welt in ein 2D-Gitter auf. Oder Sie könnten einen BSP-Tree verwenden, mit Linien als seperator Funktion.

  • Broad Phase Kollisionserkennung Dies verwendet Begrenzungsvolumen wie Zylinder oder Ellipsen (je nachdem, was die Form Ihres Sprites die besten annähert), um zu bestimmen, ob Objekte sind in detaillierter Vergleich lohnt sich. Die Mathematik hierfür ist einfach. Lernen Sie Ihre 2D-Matrix-Transformationen. Und für 2d Kreuzung, Sie können sogar Hochleistungs-Grafikkarten verwenden, um eine Menge Arbeit zu tun!

  • Narrow Phase Kollisionserkennung Nun, da Sie festgestellt haben, dass zwei oder mehr Objekte im Wert zu vergleichen, treten Sie in Ihren fein abgestimmte Abschnitt. Das Ziel dieser Phase ist es, die Kollision Ergebnis zu bestimmen. Eindringtiefe, Volumen umfasste, etc ... Und diese Informationen werden in zugeführt werden, was auch immer Physik-Engine Sie geplant wurde. In 3d ist dies der Bereich des GJK Abstand ALGs und anderen neato Algorithmen, die wir alle so sehr lieben!

Sie können allgemein all dies umzusetzen und die breiten und schmalen Auflösungen polymorph angeben oder einen Haken geben, wenn Sie in einer unteren Ebene Sprache arbeiten.

Collisions zwischen dem, was? Es hängt davon ab, ob Sie verwenden Sprites, konkave Polygone, konvexe Polygone, Rechtecke, Quadrate, Kreise, Punkte ...

Überprüfen auf eine Kollision zwischen zwei Kugeln in 2D ist einfach. Sie können Google es aber im Grunde überprüfen Sie, ob die Länge der beiden Kugeln kombiniert Radius zwischen der Mitte der beiden Kugeln größer oder gleich dem Abstand ist.

Dann können Sie den Kollisionspunkt finden durch den Einheitsvektor zwischen der Mitte der Kugeln nehmen und multiplizieren sie mit einem der Kugeln Radius.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top