Einen Box2D-Ball auf konstante Höhe springen lassen


8

Ich möchte ein Spiel wie Doodle Jump erstellen. Ich benutze libgdx und Box2d. Ich brauche Ratschläge, wie ich meinen Ball konstant und mit der gleichen Höhe hüpfen lassen kann.

Ich habe versucht, die Körperwiederherstellung des Balls auf 1 zu setzen, damit er ständig springen kann, aber wenn ich auf einen Block springe, ist der "Impuls" kleiner. Ich habe auch versucht, die Kollision zu erkennen und dann einen Impuls anzuwenden, aber es hat auch nicht funktioniert.

Wie kann ich den Ball jedes Mal auf die gleiche Höhe springen lassen?


6
Vielleicht möchten Sie Ihre eigene "Physik" einführen, anstatt box2d zu verwenden. Ein Spiel wie Doodle Jump würde ohne eine Physik-Engine nicht zu viel Arbeit erfordern.
Jgallant

Antworten:


15

Geben Sie hier die Bildbeschreibung ein

Wenn der Ball (rote Flugbahnkurve) einen Block höher trifft (blaues Rechteck), bewegt er sich langsamer als wenn er einen Block tiefer trifft (grünes Rechteck). Daher springt es nicht höher als dort, wo es herkommt.

Physikalisch macht dies Sinn.

Doodle Jump ist offensichtlich nicht physisch korrekt. Wenn Sie einen Effekt wie in Doodle Jump wünschen, bei dem der Impuls einer Kollision immer der gleiche ist, sollten Sie die vertikale Geschwindigkeit bei Kollisionen mit ball.speed.y = 7;oder ähnlichem selbst auf einen bestimmten Wert einstellen .


2

Box2D-Welten verwenden Dämpfung und Reibung. Bedenken Sie, dass die Welt Ihre Objekte möglicherweise dämpft, während sie simuliert werden.


1

Ich möchte auch in die Mischung einfließen lassen, dass es möglicherweise nicht notwendig ist, eine Physik-Engine dafür zu verwenden. Abhängig davon, wie Ihre Spielkollisionen behandelt werden (insbesondere die Kollisionsreaktion), können Sie möglicherweise ein sehr einfaches Bounding-Box-System erstellen, über das Sie die vollständige Kontrolle haben. In Spielen im "Doodle Jump" -Stil ist dies sogar noch einfacher. Anstatt sich Gedanken über das Erkennen von Kollisionen in Box2d zu machen und herauszufinden, ob die Kollision deaktiviert werden sollte oder nicht (z. B. wenn Sie eine Plattform von unten treffen), ist das Doodle-Jump-Szenario tatsächlich viel einfacher. Wenn sich Ihr Ball "nach unten" bewegt (y nimmt ab) und den y-Wert einer Plattform überschreitet und sich innerhalb der linken / rechten Grenzen einer Plattform befindet, kollidiert er. Das einzig wirklich "komplexe" ist der parabolische Flugweg, den Sie nehmen würden.http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordinates ).

Kollisionen mit anderen Gegenständen auf der Welt, für die keine Antwort erforderlich ist (z. B. ein Bonus), können einfach mit Begrenzungsrahmen gelöst werden.

Box2D ist phänomenal, aber oft übertrieben, wenn Sie einfache Anforderungen haben. IMO.


0

Denken Sie daran (float value = speed.y), wie schnell der Ball mit der Plattform kollidiert, und stellen Sie ihn nach dem Abprallen ein: ball.velocity.y = value * (-1)

Vielleicht wird es interessant sein, in diesen Beiträgen nachzuschauen:
erster Beitrag
zweiter Beitrag

PS Ich kann hier keinen Code einreichen, bitte schauen Sie im letzten Kommentar unter "Erster Beitrag" nach. Es gibt Code, wie ich ein ähnliches Problem gelöst habe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.