Ich wollte schon immer ein altmodisches 2D-Rollenspiel wie Star Ocean, Final Fantasy, Sword of Mana und sogar die "Tales of" -Serie erstellen, und ich denke, viele Leute tun es. Aber bevor ich überhaupt eine einzige Codezeile geschrieben habe, habe ich viel recherchiert, gezeichnet und ausprobiert.
Ich habe fast alle Antworten auf meine Fragen gefunden, aber es gibt ein Problem, das ich nicht lösen konnte: Wie erstellen Sie eine realistische, aber dennoch einfache Kollisionserkennung , wie in den zuvor genannten Spielen?
Ich kenne bereits verschiedene Methoden zur Berechnung der Kollisionserkennung. Sehen Sie sich die folgenden Beispiele an:
Keines davon befriedigt meine Bedürfnisse.
- Fliesenbasierte Kollisionen sind viel zu einfach und passen eher zu einem Zelda als zu einem Star Ocean. Außerdem muss die Zeichnung jeder Kachel den gesamten Raum ausfüllen, um realistisch auszusehen.
- Pixel-perfect hat zu viele Einschränkungen. Wenn Ihre Kachel hier und da einige Pixel hat, bleibt der Spieler höchstwahrscheinlich mitten im Nirgendwo stecken (dh in einigen Spielen bleibt man auf einer 2 Pixel breiten Baumwurzel stecken).
- Und binäre Masken verbrauchen zu viel Speicher und Einstellungen imo.
Ich habe viel Dokumentation gelesen, aber nie etwas gefunden, das für mich gut aussah. Und alle meine Versuche sahen nicht so aus, wie ich früher gespielt habe. Wenn Sie also gute Links oder Tutorials zur Funktionsweise von 2D-Rollenspielen haben, lassen Sie es mich bitte wissen.
quelle
Antworten:
Die N Tutorials können hier helfen. Zugegeben, sie sind für einen Plattformspieler im Arcade-Stil gedacht, aber sie funktionieren genauso gut für ein Rollenspiel von oben nach unten. Wende einfach nicht die Schwerkraft an. Die Voraussetzung ist das Testen auf Kollision in einer Sammlung von Grundformen - Kreisen, achsenausgerichteten Begrenzungsrahmen, Linien, Punkten usw.
Sie dekorieren dann entweder Ihre Welt damit (möglicherweise über einen benutzerdefinierten Ebeneneditor) oder generieren sie automatisch (passen Sie eine nächste Box oder einen Kreis an) - oder beides (standardmäßig automatisch generierte Box / Kreis und lassen Sie einen Designer optimieren) .
Wo ich arbeite, haben wir einige Plattformer und einige Top-Down-Erkundungsspiele gemacht. Wir machen sie seit den GBA-Tagen. Wir verwenden AABBs am häufigsten für Charaktere und Objekte, die in einem Sprite-Editor eingestellt werden können - und wir werden hier verrückt und erlauben eine Menge Boxen pro Sprite, einige mit unterschiedlichen Zwecken. Wir haben vielleicht:
Die Ebenen sind meistens Zeichenfolgen von Liniensegmenten; Wir haben ein paar Metadaten pro Segment, um beschädigte oder rutschige Oberflächen usw. zu beschreiben.
Der größte Teil der Kollisionserkennung und -reaktion wird also zu AABB-vs-AABB oder AABB-vs-Segment. Gelegentlich werfen wir einen Kreis gegen etwas für ein Projektil, obwohl oft auch ein AABB dies hier tut.
Sie brauchen nicht viele Grundformen, damit die Dinge gut aussehen und sich gut verhalten - einige reichen aus, vorausgesetzt, Sie können sie optimieren und wiederholen.
Fühlen Sie sich auch nicht schlecht, wenn Sie Systeme miteinander mischen. Eine auf Kacheln basierende Kollision kann in einigen Bereichen (die den größten Teil Ihrer Welt repräsentieren) ausgezeichnet sein, ist jedoch für Objekt-Objekt-Interaktionen schrecklich. Das ist gut; Verwenden Sie ein anderes System für Objekt gegen Objekt! Das Schreiben für Interaktionen zwischen den beiden Systemen ist möglicherweise einfacher als Sie denken.
quelle