Ich habe ein 2D-Plattformspiel, bei dem der Spieler immer nach rechts läuft, das Gelände jedoch nicht immer horizontal ist. Beispiel:
Ich habe ein Bounding-Box-Kollisionssystem implementiert, das nur nach Schnittpunkten mit der Player-Box und den anderen Blöcken sucht, um den Spieler am Laufen zu hindern, wenn Sie auf einen großen Block stoßen, sodass Sie springen müssen, aber wenn ich Treppen setze, möchte ich, dass er es tut lauf reibungslos wie auf dem horizontalen Boden. Mit dem Kollisionssystem müssen Sie die Treppe springen, um sie zu passieren!
Ich dachte darüber nach, eine Linie zwischen den Rändern der Treppe zu erzeugen und der Spielerbewegung diese Linie aufzuzwingen ... Was denkst du? Gibt es etwas Klügeres zu tun?
Wenn Sie die Begrenzungsrahmen drehen können, hätte ich dem Spieler eine um 45 Grad gedrehte Box zu Füßen gelegt und sie mit einer nicht gedrehten Box kombiniert, um den Rest des Körpers darzustellen. Dadurch könnte der Player automatisch über alles gleiten, was klein genug ist.
Dies würde jedoch wahrscheinlich zu einigen Übersteuerungen des Spielermodells und der Treppe führen.
Eine andere Idee ist es, eine Begrenzungsbox vom Kopf des Charakters zu setzen, um mit einer höheren Breite als die Box des Charakters zu kneten.
Wenn der Spieler mit etwas kollidiert, was die Box 'A' nicht tut, können Sie den Spieler auf das bewegen, mit dem er kollidiert ist
_________________
||||||||| A | pla | A ||____| yer |____||| _________________________ <- step
|||---------------------------------------------<- ground
Es gibt drei allgemeine Ansätze für den Umgang mit Treppen in Videospielen:
Der "Mario" -Ansatz ist, dass Sie springen müssen, um Treppen hochzukommen.
Der "Castlevania" -Ansatz ist, dass das Auf- und Abbewegen von Treppen eine andere Art von Bewegung ist; Sie müssen auf dem Controller auf "Nach oben" drücken, und eine spezielle "Treppensteigen" -Animation wird abgespielt, um die Treppe zu überqueren. Eine Variante davon ist der "Resident Evil" -Ansatz, bei dem das Auf- und Abbewegen von Treppen als vollständige Zwischensequenz behandelt wird, die abgespielt wird, wenn der Spieler einen Interaktionsknopf drückt. Interaktives Treppensteigen ist überhaupt nicht gestattet.
Der Ansatz "Fast jeder andere" ist der von Ihnen erwähnte: Behandeln Sie die Treppen so, als wären sie tatsächlich eine Rampe. Je nachdem, um welche Art von Spiel es sich handelt, möchten Sie die Rampe möglicherweise in unterschiedlichen Höhen relativ zur Treppe platzieren. Typischerweise fällt in einem 2D-Spiel der Trick "Die Treppe ist tatsächlich eine Rampe" für den Spieler weniger auf, wenn die Rampe mit den unteren Ecken jeder Treppenstufe übereinstimmt, während er in einem 3D-Spiel normalerweise weniger auffällt, wenn die Rampe eben ist mit den oberen Ecken jedes Schrittes. (Wie in einem 2D-Spiel ist es einfacher zu erkennen, ob die Füße eines Charakters über dem Boden schweben, und Sie möchten dies minimieren, während es in einem 3D-Spiel einfacher ist zu bemerken, ob die Füße eines Charakters durch den Boden schneiden, und Sie auch das minimieren wollen).
Tolle Bemerkung zu Float / Clipping bei verschiedenen grafischen Gesichtspunkten.
Kroltan
Ihre Angaben sind ziemlich falsch. Nur in den alten Mario-Spielen muss man springen, um die Treppe hinaufzukommen. Aber ich denke das ist offensichtlich. Aber das ansässige Böse hatte definitiv auch Treppen, die interaktiv erklommen werden können!
Tara
4
Die meisten Methoden, auf die ich gestoßen bin, wurden bereits oben angegeben - aber es gibt noch eine, die nicht erwähnt wurde. Wenn der Spieler auf ein vertikales Hindernis stößt, das kurz genug ist (z. B. 1/3 seiner Höhe), legen Sie es einfach oben ab. Minecraft und die Source-Engine verfolgen diesen Ansatz beispielsweise in einer solchen Situation. Darüber hinaus können Sie mit dieser Methode weiterhin reines AABB für die gesamte Physik verwenden, ohne den Spieler durch den Schmerz zu bringen, ständig Treppen hochspringen zu müssen.
Wäre schön, wenn Sie erklären könnten, wie man solche Hindernisse erkennt.
Tara
0
Ich arbeite derzeit an einem ähnlichen Teil einer Engine. Ich habe mit Treppen / Hängen umgegangen, indem ich die transparenten Pixel in meiner Rampentextur gezählt und das Objekt des Spielers um den gefundenen Betrag versetzt habe.
Ich kann mir vorstellen, dass Sie genau danach suchen würden, und Sie können eine andere Animation abspielen, die entsprechend dem Aufstieg der Treppe abgespielt wird.
Die meisten Methoden, auf die ich gestoßen bin, wurden bereits oben angegeben - aber es gibt noch eine, die nicht erwähnt wurde. Wenn der Spieler auf ein vertikales Hindernis stößt, das kurz genug ist (z. B. 1/3 seiner Höhe), legen Sie es einfach oben ab. Minecraft und die Source-Engine verfolgen diesen Ansatz beispielsweise in einer solchen Situation. Darüber hinaus können Sie mit dieser Methode weiterhin reines AABB für die gesamte Physik verwenden, ohne den Spieler durch den Schmerz zu bringen, ständig Treppen hochspringen zu müssen.
quelle
Ich arbeite derzeit an einem ähnlichen Teil einer Engine. Ich habe mit Treppen / Hängen umgegangen, indem ich die transparenten Pixel in meiner Rampentextur gezählt und das Objekt des Spielers um den gefundenen Betrag versetzt habe.
Es ähnelt der Idee der Höhenkarte, die in diesem Artikel beschrieben wird: http://info.sonicretro.org/SPG:Solid_Tiles#Slopes_And_Curves
Ich kann mir vorstellen, dass Sie genau danach suchen würden, und Sie können eine andere Animation abspielen, die entsprechend dem Aufstieg der Treppe abgespielt wird.
In diesem Artikel finden Sie auch einen guten Überblick über die verschiedenen Hangkonzepte : http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/
quelle