Bewegen eines Charakters entlang eines gekrümmten Abhangs in einer Welt mit Schwerkraft

10

Ich habe dieses Spiel gesehen

Ausgefallene Hosen 2 . Abgesehen von der Physik und den schönen Animationen ist mir aufgefallen, dass sich die Figur entlang von Hängen bewegt, sogar entlang gekrümmter Hänge. Ich habe wenig Erfahrung mit Box2d, aber dieses Konzept von gekrümmten Hängen ist für mich neu. Es wäre eine große Hilfe für mich, wenn mich jemand über dieses Konzept und seine Umsetzung aufklären würde. Auch wenn sich die Implementierung nicht in box2d befindet, ist dies willkommen.

Vishnu
quelle
2
Metanet, die Leute, die N gemacht haben (was in Flash ist), haben ein Tutorial darüber, wie sie Kollisionen gemacht haben, das beschreibt, wie sie Kurven berechnen: metanetsoftware.com/technique/tutorialA.html
CodexArcanum

Antworten:

5

Wie bekommt man Kurven in Box2D?

In der unveröffentlichten Version von Box2D gibt es zwei neue Formtypen, b2LoopShape und b2EdgeShape , mit denen Sie Kurven aus einer Folge von Liniensegmenten erstellen können.

In der veröffentlichten Version können Sie mehrere kleine Kästchen verwenden, die in Winkeln angeordnet sind, um einen ähnlichen Effekt zu erzielen. Körper neigen jedoch dazu, instabile und unerwartete Dinge in der Nähe von Verbindungspunkten auszuführen. Daher würde ich empfehlen, die unveröffentlichte Version zu verwenden.

Wie kann ein Charakter die Kurve hinunterfallen?

Mach aus dem Charakter ein Rad! Meine Frage zur Plattformerphysik hat einige Diskussionen darüber , aber die Grundidee besteht darin, den Körper Ihres Charakters auf einem rotierenden Rad zu montieren und sich durch Aufbringen einer Rotationskraft auf das Rad zu bewegen. Obwohl (eigentlich weil) das Rad Reibung hat, bewirkt die nach unten gerichtete Kraft der Schwerkraft, dass es sich wie ein echtes Rad nach unten dreht. Indem Sie die Motorparameter des Drehgelenks ändern , können Sie es so weit wie nötig der Drehung widerstehen lassen, um zu vermeiden, dass es kleine Steigungen hinunterrollt.

Gemeinschaft
quelle
Ich stimme Ihnen zu, mit b2LoopShape könnte ich eine Steigung nach meinem Wunsch erstellen. Aber wenn Sie dem Link folgen, den Sie gepostet haben; Das Problem ist, dass es nicht zu einem Flash-Port von box2d führt, sondern nur zu einer C ++ - Version. 1.) Hast du irgendwelche Vorschläge dafür? oder 2.) Kennen Sie eine andere Physik-Engine für Flash, mit der gekrümmte Hänge erzeugt werden können?
Vishnu
Ich denke nicht, dass der Flash-Port von Box2D mit den neuen Gelenk- / Formtypen auf dem neuesten Stand ist. Ich habe keine Ahnung, welche Physik-Engines für Flash außer Box2D verfügbar sind.
@ Joe: Wenn ich dich frage, ob es machbar wäre, wenn ich versuchen würde, eine AS-Klasse für b2LoopShape zu schreiben, damit ich sie in die Box2d Flash-API integrieren kann. Wohin müsste ich gehen? Irgendeine Ahnung?
Vishnu
1

Fancy Pants wurde in Flash erstellt, und Flash verfügt über eine spezielle Methode namens "hitTest", mit der Sie ein Pixel (in diesem Fall führt er wahrscheinlich 2-3 Pixel-HitTests am unteren Rand des Fancy Pants-Zeichens durch) gegen alles zeichnen können, was gezeichnet wird innerhalb eines bestimmten Movieclip-Objekts. Es kann etwas schwierig sein, das Gefühl richtig zu machen, aber diese integrierte Funktion ist der Grund, warum so viele Flash-Spiele Kollisionen mit gekrümmten Hängen haben. Der Prozess ist für die meisten anderen Motoren viel komplizierter und muss normalerweise manuell durchgeführt werden, es gibt jedoch einige verschiedene Methoden.

Die Methode, mit der ich am besten vertraut bin, ist, wenn Ihre Engine auf Kacheln basiert (denken Sie an Sonic the Hedgehog), können die als gekrümmt bezeichneten Kacheln jeweils eine Formel haben, die die Kollisionsposition 'Y' basierend auf der aktuellen 'X'-Position des Charakters bestimmt auf dieser Fliese. Sie müssten die Formel basierend darauf bestimmen, wie steil ein Hang ist und wie gekrümmt Sie suchen. Sie können einen Grafikrechner oder ein Grafikprogramm verwenden, um mit den Formeln zu experimentieren. Auf diese Weise können mehrere Kacheln mit unterschiedlichen Kurven und Formeln verknüpft werden.

Brian Cable
quelle
Sonic hat keine Kurvenformel für die Kacheln. Für jedes Pixel wird eine 2D-Höhenkarte verwendet.
AttackingHobo
@AttackingHobo: Kannst du mir sagen, was eine 2dheight-Karte für jedes Pixel ist, oder kannst du mich auf einen Ort verweisen, an dem ich das in meinen Flash-Spielen verwenden kann?
Vishnu
2
info.sonicretro.org/Sonic_Physics_Guide Schauen Sie sich das an. Ich weiß nicht, ob dies Ihnen helfen wird, wenn Sie Box 2d verwenden. Möglicherweise müssen Sie Ihre eigene Physik-Engine rollen.
AttackingHobo
@Attacking Hobo: Gibt es einen Vorteil oder eine Möglichkeit, gekrümmte Hänge zu "machen", wenn ich versuche, eine AS 3.0-Klasse zu erstellen, die Schleifen in der box2d-API zulässt?
Vishnu