Bereue ich die Verwendung eines farbbasierten Kollisionserkennungssystems?


7

Ich fange gerade erst an, mein erstes Spiel mit XNA zu erstellen (ich habe Erfahrung mit C #, aber nicht mit Spielen).

Ich baue einen ziemlich einfachen Top-Down-2D-Shooter. Ich habe dieses Tutorial über die Verwendung eines farbbasierten Kollisionssystems gelesen und es klang für mich wirklich cool. http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

Das bedeutet, dass ich mit jedem Grafikprogramm schnell Level erstellen kann und meine Szenerie (Wände, Bäume usw.) nicht in Bezug auf Kollisionsboxen usw. definieren muss, oder?

Ich kann jedoch sehen, dass das Gehen auf diesem Weg bedeutet, dass die Berechnung zur Bestimmung, ob sich schnell bewegende Objekte wie Kugeln Wände usw. schneiden, möglicherweise schwieriger wird, weil Sie keine grundlegenden Berechnungen für den Schnittpunkt der Geometrie durchführen können.

Ist das richtig? Werde ich es bereuen, in diese Richtung gegangen zu sein, wenn mein Spiel mit der Zeit komplexer wird? Es lohnt sich, nur in die Erstellung eines Level-Editors zu investieren, um meine Szenerie in Bezug auf die Geometrie zu definieren?

Jeder Rat für einen Noob sehr geschätzt!

Antworten:


6

Sie sind mit Ihren Beobachtungen bezüglich der Fähigkeiten eines Bitmap-basierten Kollisionsansatzes genau richtig.

Diese Methode bietet eine wirklich einfache Möglichkeit, Ihre Ebenen mit jedem Programm zu bearbeiten, das eine Bitmap ausgeben kann (jedes Bildbearbeitungsprogramm). Dieses System ist auch sehr flexibel, wenn Sie verschiedene Bodentypen definieren möchten. Sprich greenfür Schlamm und redfür einen festen Untergrund. Sie können dann einfach das aktuelle Pixel abfragen und die Art des Untergrunds bestimmen, auf dem der Player steht. Auch Rampen (Gefälle vom Bodentyp A nach B) sind problemlos möglich.

Probleme treten bei der Kollisionserkennung auf. Es ist einfach, einen Schnittpunkt mit einem anderen Objekt zu erkennen (führen Sie einfach einen Pixeltest durch), aber es ist schwierig (rechenintensiv) herauszufinden, welche Ausrichtung das Objekt hat, mit dem Sie kollidiert haben. Dies ist besonders wichtig, wenn Sie eine normale Oberfläche benötigen , um Objekte korrekt abzulenken .

Auch sehr schnell bewegte Objekte können ein Problem sein, insbesondere wenn Sie dünne (z. B. 1 Pixel breite) Objekte haben, mit denen Sie kollidieren können. Es gibt diese Frage , die dieses Thema bereits behandelt.

Am Ende hängt alles davon ab, welche Art von Spiel Sie erstellen möchten und welche Auflösung (in Bezug auf Kollisionserkennung / -auflösung) Sie benötigen. Der Bitmap-basierte Ansatz funktioniert am besten, wenn ein großer Teil Ihrer Welt statisch ist. Aber es ermöglicht Ihnen auch, Dinge wie zerstörbare Levels ganz einfach zu implementieren .

Da Sie die Art des Spiels, das Sie erstellen möchten, nicht erwähnt haben, liegt es nun an Ihnen, zu entscheiden, ob ein Bitmap-basierter Kollisionsansatz für Ihr Spiel von Vorteil ist oder nicht. Viel Glück.


Nach meiner Erfahrung ist das Problem der Oberflächennormalen im Vergleich zur tatsächlichen Bestimmung des Winkelimpulses nach einem Aufprall in einem pixelgenauen Kollisionserkennungssystem ziemlich trivial. Im Allgemeinen wird PPCD nicht für Spiele verwendet, die diese Detailgenauigkeit erfordern, wahrscheinlich weil dies die Dinge in dieser Hinsicht viel schwieriger macht als die vektorbasierte Physik. Das andere Problem, das ich bei diesem Ansatz hatte, war die Möglichkeit, "hängen zu bleiben", wenn Sie Ihren Charakter in bestimmten Positionen in Ihrem Level drehen. Box2D und dergleichen behandeln dies, indem sie Zentroide auseinander drücken, wenn sie zu nahe sind.
Ingenieur

vielen Dank! Ich habe nicht vor, Ablenkungen vorzunehmen, also denke ich, dass das in Ordnung ist. Ich war mir nicht sicher, was ich mit schnell fahrenden Kugeln tun sollte, die in einem einzigen Rahmen über Wände springen könnten. Um herauszufinden, ob sie eine Wand überquert haben, scheint es in Ordnung zu sein. Nehmen Sie einfach ein Beispiel des Kartenbildes in einem langen, dünnen Rechteck, das der Aufzählungspfad ist, und suchen Sie nach wandfarbenen Pixeln. Aber das erste Wandpixel herauszufinden, das es getroffen hätte, scheint etwas schwieriger zu sein. Ich denke, wenn die Kugel zum ersten Mal abgefeuert wird, würde ich einen Raycast durchführen und in kurzen Abständen eine Reihe von Beispielpixeln entlang des Strahls nehmen, um nach dem ersten Wandpixel zu suchen und diesen als Aufprallpunkt zu markieren.
TerryB

2
@ TerryB: Ich denke, der Bresenham- Linienalgorithmus wird hier gut funktionieren. Zeichnen Sie die Linie, bis Sie auf ein Wandpixel treffen, und das ist Ihr Kollisionspunkt.
Bummzack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.