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) "