Ich habe einen grundlegenden Charakter-Controller für einen 2D-Plattformer mit Box2D eingerichtet und fange an, ihn zu optimieren, damit er sich gut anfühlt. Physik-Engines haben eine Menge Drehknöpfe zu tun, und es ist mir nicht klar, welche ich verwenden sollte, wenn ich zum ersten Mal mit einer Physik-Engine schreibe. Sollte das Springen eine Kraft für mehrere Zecken ausüben? Ein Impuls? Geschwindigkeit direkt einstellen? Wie verhindere ich, dass der Avatar an Wänden haftet, ohne dass die Reibung abnimmt (oder nehme ich die Reibung ab, aber nur in der Luft)? Soll ich den Charakter als Kapsel modellieren? Eine Box mit abgerundeten Ecken? Eine Box mit zwei Rädern? Nur ein großes Rad? Ich fühle mich wie jemand muss dies zuvor getan haben!
Es scheinen nur sehr wenige Ressourcen im Internet verfügbar zu sein, die nicht "Babys erste Physik" sind, und die alle aufhören, wenn ich hoffe, dass jemand die Probleme bereits gelöst hat. Die meisten Beispiele für Physikmotoren für Plattformfahrer verfügen über eine Steuerung mit Schwimmgefühl oder über Sprünge in der Luft oder über ein leicht ausnutzbares Verhalten, wenn das vorübergehende Eindringen zu hoch ist usw.
Einige Beispiele von dem, was ich meine:
- Ein kurzer Sprungsprung springt eine kurze Strecke; ein langer Tipp springt höher.
- Kurzes Schleudern beim Anhalten oder Umkehren mit hoher Geschwindigkeit.
- Auf Steigungen stabil stehen (aber beim Ducken vielleicht nach unten rutschen).
- Analoge Geschwindigkeit bei Verwendung eines analogen Controllers.
- Alle anderen Dinge, die gute und schlechte Plattformer voneinander trennen.
- Traue ich mich, stabile bewegliche Plattformen vorzuschlagen?
Ich bin nicht wirklich auf der Suche nach "Hey, mach das." Das Richtige hängt natürlich davon ab, was ich im Spiel will. Aber ich hoffe, irgendwo hat jemand die Möglichkeiten durchgesehen und gesagt: "Nun, Technik A hat X gut, Technik B hat Y gut, aber das funktioniert nicht mit C", oder es gibt einige Beispiele, die über "if (key =" hinausgehen = Leerzeichen) character.impulse (0, 1) "
Ehrlich gesagt denke ich nicht, dass die Verwendung einer Physik-Engine der richtige Ansatz für etwas in dieser Größenordnung mit extrem strengen Anforderungen ist.
Schreiben Sie einfach alles selbst. Sie erhalten viel bessere Ergebnisse, wenn Sie in dieser Parabelform "Zeichen um x Einheiten nach oben bewegen, wenn Sie die Sprungtaste für die Länge y gedrückt halten" sagen, als wenn Sie eine Reihe von Knöpfen zum Ändern haben.
quelle
Ich habe eine Reihe von Artikeln über das Erstellen eines Plattformspiels von Grund auf mit modernen Technologien geschrieben. Darin ist enthalten, wie ich mit der einfachen Physik umgegangen bin:
http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/
Wenn Sie jedoch etwas High-Techeres wollen, ist es durchaus möglich, dies mit einer vollständigen Physik-Engine zu erreichen. Hier ist eine Technik, die Sie verwenden können (von Little Big Planet), die den Spielercharakter zu einem vollständig integrierten Teil der Physik-Engine macht:
Anstatt Impulse anzulegen oder Geschwindigkeiten einzustellen, um den Spieler als "externe Eingänge" für die Physik-Engine zu bewegen, können Sie eine Einschränkung entwickeln, die den Charakter steuert.
Diese Einschränkung hat also die gewünschte Geschwindigkeit und Richtung des Spielers als Eingabe (aus dem Spiel) und modelliert Dinge wie die maximale Stärke und Geschwindigkeit des Spielers. Die Einschränkung versucht, den Spieler gemäß seinen Eingaben (und unter Einhaltung der Maximalwerte) zu bewegen, und weil sie eine Einschränkung ist, übt sie eine gleiche und entgegengesetzte Kraft auf das Objekt aus, auf dem der Spieler steht, wodurch der Spieler auf sich bewegenden Plattformen stehen kann und die Dinge zu beeinflussen, über die er sich bewegt.
Wenn Sie solche Dinge tun, können Sie den Spieler auf ganz natürliche Weise in die Lage versetzen, Situationen zu meistern, in denen er sich unter einem riesigen Stapel von Kisten befindet oder über mehrere sich bewegende Plattformen springt, da er jetzt ein Kernbestandteil der Physik-Engine ist.
Ich hoffe, das hilft!
Prost, Paul.
quelle
Diese Frage wurde in den Box2D-Foren ausführlich diskutiert. Wenn Sie die Diskussionen über Charakterbewegung, Springen oder Plattformer lesen, werden Sie auf jedes mögliche Problem stoßen. Das Problem wurde jedoch so kompliziert, dass das Kollisionsfiltersystem aktualisiert und ein Testbed-Beispiel erstellt wurde, das nur zeigt, wie es durchgeführt werden sollte.
quelle