Beste Weg, um zu erkennen, Kollisionen zwischen sprites?
Was ist der beste Weg zur Kollisionserkennung in einem 2d-Spiel sprites? Ich bin zurzeit in der allegro-und G++ -
Diese Frage ist nun zu sprites.
InformationsquelleAutor Abhishek Mishra | 2008-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine fülle von Möglichkeiten zu erkennen, die Kollisionserkennung. Die Methoden, die Sie verwenden werden leicht verändert werden, wenn, je nachdem, ob Ihr mit einer 2d-oder 3d-Umgebung. Denken Sie auch daran, wenn die Einführung einer collision detection-system, zu berücksichtigen Physik, die Sie vielleicht implementieren möchten, in das Spiel (erforderlich für die meisten der Abstieg 3d-Spiele), um eine Verbesserung der Realität.
Die kurze version ist die Verwendung von bounding-Boxen. Oder in anderen Worten, machen Sie jede Entität in der Welt ein Feld, dann überprüfen Sie, ob jeder von den Achsen der box sind Kollisionen mit anderen entities.
Mit großen Mengen von Entitäten zu testen Kollisionen können Sie überprüfen möchten, in einem octree. Sie würden einfach, teilen die Welt in Sektoren, dann nur zu überprüfen, die Kollision zwischen Objekten im gleichen Sektor.
Mehr Ressourcen, Sie können gehen Sie zu sourceforge und die Suche nach der Kugel dynamics engine, die ist ein open-source-Kollisionserkennung und Physik-engine, oder Sie können check out http://www.gamedev.net, die viele Ressourcen auf ausgiebige Spiel-Entwicklung Themen.
InformationsquelleAutor cs_student
Jeder anständige 2D-Grafik-Bibliothek, bieten entweder eigene Kollision-detection-Funktionen für alles, ausgerichtet von sprites zu Polygonen, Pixeln, oder ein oder mehrere gute Bibliotheken von Drittanbietern, um diese Funktionen ausführen. Ihre Wahl der engine/library/framework sollte diktieren Ihre Kollisionserkennung Entscheidungen, da Sie wahrscheinlich weit mehr optimiert als das, was Sie könnten, produzieren allein.
Für Allegro es ist Collegro. Für SDL gibt es SDL_Collide.h oder SDL-Kollidieren. Sie können I_COLLIDE mit OpenGL. DarkBASIC hat einen eingebauten Kollisions-system, und DarkPhysics für sehr genaue Interaktionen, einschließlich Kollisionen.
Mishra möchten Sie vielleicht hinzufügen, dass auf Ihre Frage, vielleicht kennt noch jemand eine andere schöne Lösung für Sie.
Die Collegro url funktioniert nicht, aber findet man einen thread über ihn hier: allegro.cc/forums/thread/550371 Auch für Allegro es ist PPCol.
InformationsquelleAutor Sparr
Nutzen Sie die Bibliothek, ich empfehle Box2D
InformationsquelleAutor Niall
Diese Frage ist ziemlich allgemein. Es gibt viele Wege zu gehen über die Kollisionserkennung in einem 2d-Spiel. Es würde helfen zu wissen, was Sie zu tun versuchen.
Als Ausgangspunkt, allerdings gibt es Recht einfache Methoden, die für die Erkennung zwischen Kreise, Rechtecke, etc. Ich bin kein großer fan von gamedev.net aber es gibt einige gute Ressourcen gibt es über diese Art der Erkennung. Ein solcher Artikel ist hier. Es behandelt einige grundlegende material, die helfen könnten, Sie bekommen begann.
Einfache 2d-Spiele verwenden können, Rechtecke oder Kreise zu "umschließen" ein Objekt auf dem Bildschirm. Erkennung, wenn die Rechtecke sich überlappen oder wenn die Kreise überlappen, ist ziemlich straightfoward math. Wenn Sie etwas komplizierter (wie konvexe artibrary polys), dann ist die Lösung komplizierter. Wieder, gamedev.net könnte hier etwas Hilfe.
Aber wirklich Ihre Frage zu beantworten, müssen wir wissen, was Sie zu tun versuchen? Welche Art von Spiel? Welche Art von Objekten sind, die Sie versuchen zu kollidieren? Sind Sie versuchen, kollidieren mit Bildschirm, Grenzen, etc.
InformationsquelleAutor Mark
Umsetzung einer collision detection-system ist eine komplizierte Angelegenheit, aber Sie wollen auf drei Punkte.
Welt der Objekte. Raum-Partitionierung.
Wenn Sie eine Kollisionsprüfung gegen jede 2d-Sprites in Eure Welt gegen alles andere, Sie haben eine langsame, langsame Programm! Sie brauchen, um zu priorisieren. Sie müssen die partition, der Speicherplatz. Sie können verwenden Sie eine orthogonale grid-system und schneiden Sie Ihre Welt in ein 2d-Gitter. Oder könntest du eine BSP-Baum, mit Linien als seperator Funktion.
Broad phase-Kollisionserkennung
Dies nutzt bounding volumes wie Zylinder oder durch Anwahl des Buttons " (je nachdem, welcher annähernd die Form des sprites die besten), um zu bestimmen, ob oder ob nicht Objekte sind, lohnt sich ein Vergleich im detail. Die Mathematik ist einfach. Lernen Sie, Ihre 2d-matrix-Transformationen. Und für 2d-Kreuzung, können Sie sogar Hochleistungs-Grafikkarten eine Menge tun, um die Arbeit!
Narrow phase-Kollisionserkennung
Nun, Sie haben bestimmt, dass zwei oder mehr Objekte sind, lohnt sich ein Vergleich, Sie Schritt in Ihre fein abgestimmte Abschnitt. Das Ziel dieser phase ist die Bestimmung der Kollision führen. Eindringtiefe, Volumen umfasste, etc... Und diese Informationen eingespeist werden, was der Physik-engine geplant. In 3d-dies ist der Bereich GJK Entfernung ALG und andere neato algorithmen, die wir alle so sehr lieben!
Implementieren Sie können all dies ganz allgemein, und geben Sie die Breite und schmale Auflösungen polymorph, oder einen Haken, wenn Sie arbeiten in einem niedrigeren level-Sprache.
InformationsquelleAutor
Kollisionen zwischen was? Es hängt davon ab, ob Sie verwenden die sprites, konkave Polygone, konvexe Polygone, Rechtecke, Quadrate, Kreise, Punkte...
InformationsquelleAutor Thomas
Überprüfung auf Kollision zwischen zwei Kugeln in 2D ist einfach. Sie können google, aber im Grunde kannst du überprüfen, ob die Länge der beiden Kugeln mit radius verbunden ist, größer oder gleich dem Abstand zwischen der Mitte der beiden Kugeln.
Dann finden Sie kollisionspunkt durch die Einnahme der Einheitsvektor in der Mitte zwischen den Kugeln und multiplizieren Sie ihn mit einer der Kugeln radius.
InformationsquelleAutor Adam Smith