Jump´n Run Sprung

Moderator: Rockford

Antworten
Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Jump´n Run Sprung

Beitrag von Dr. Irata »

Hallo in die Runde!
Ich wollte hier mal ein Thema diskutieren, was mich jetzt noch nicht gleich betrifft, aber bei meinem 3. Spiel (es soll dann ein Jump´n Run werden)!
Der perfekt animierte Sprung im Laufen und Stehen in Assembler.
Eins ist wohl schon klar, es wird eine gute Näherung sein müssen und man wird es nicht berechnen, sondern man wird eine Wertetabelle brauchen für die Zuordnung der Sprungbewegung.
Dennoch möchte ich hier mal gerne die physikalischen Grundlagen erörtern und bin dann schon sehr gespannt auf Eure Lösungen und Erfahrungen.
Physik:
Wir beschäftigen uns hier also mit dem vertikalen und schrägen Wurf! Mehrere Parameter sind dabei bekannt bzw. müssen berücksichtigt werden: Die Anfangsgeschwindigkeit des Sprunges nach oben, der Winkel des Absprunges, die Geschwindigkeit nach vorne und die Gravitation bzw. die Erdbeschleunigung. Betrachten wir gleich noch zusätzlich die Höhe des Absprunges (also wenn der Player von einer höheren Position nach unten springt - bei gleicher Höhe wird der Wert dann 0).
Wir haben also zunächst eine Anfangsgeschwindigkeit V0. Diese Geschwindigkeit teilt sich in zwei Richtungen auf (in x und in y-Richtung) also mathematisch in: V0 = Wurzel (VX Quadrat + VY Quadrat). Für die Anfangsgeschwindigkeit in x-Richtung ergibt das dann: V0,x=V0 x cos Alpha und in y-Richtung: V0,y=V0 * sin Alpha.
In x-Richtung haben wir eine gleichmäßige Bewegung: x = V0 * cos Alpha * t (t ist die Zeit).
In y-Richtung haben wir durch die Erdbeschleunigung eine gleichmäßig beschleunigte Bewegung: y = h0 - g/2 * t Quadrat + V0 x sin Alpha x t - h0 ist dabei die Anfangshöhe und g die Erdbeschleunigung.

Wenn man nun die 2. Gleichung nach t umstellt und in die erste Gleichung t dadurch ersetzt, bekommt man die erwünschte Bahngleichung:
y(x) = h0 - g/(2 * V0 Quadrat * (cos Alpha) Quadrat) * x Quadrat + x * tan Alpha

Mit dieser Formel kann man jetzt alle Werte für den Sprung ausrechnen. Die werte werden sicherlich schön krumm sein und da muss man da wohl für sich und sein Programm die beste Näherung bzw. Rundung finden...
Dateianhänge
Bildschirmfoto 2022-12-07 um 12.25.50.png
Bildschirmfoto 2022-12-07 um 12.25.50.png (13.61 KiB) 1082 mal betrachtet
Zuletzt geändert von Dr. Irata am 07.12.2022 14:10, insgesamt 1-mal geändert.

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: Jump´n Run Sprung

Beitrag von Dr. Irata »

Folgende Näherung fällt mir da jetzt gleich ein:

Zunächst mal bei einem Sprung vom Boden hoch und zurück auf den Boden fällt h0 komplett weg.
Für g (9,81m/sec2) nehmen wir mal direkt 10.
Nimmt man 45 Grad (Alpha) ist ja cos 45 Quadrat = 0,5 und tan 45 = 1
Bleibt also: y(x) = x - 10 / v0 Quadrat * x Quadrat
Man könnte jetzt noch eine schöne Laufgeschwindigkeit von 4,5 m/s - entspricht etwa 16 km/h annehmen - dann bleicht am Ende: y(x) = x - 0,5 * x * x - also eine umgekehrte Parabel!

Die Flugbahn dazu:
Bildschirmfoto 2022-12-07 um 13.55.47.png

Online
Benutzeravatar
Kveldulfur
Beiträge: 624
Registriert: 17.08.2021 02:32
Has thanked: 237 times
Been thanked: 163 times
Kontaktdaten:

Re: Jump´n Run Sprung

Beitrag von Kveldulfur »

Hallo!

Ich hatte zwar schon mit Peter (per Whatsapp) das Thema angesprochen, möchte aber hier gerne noch einmal meine Überlegungen Kund tun.
Bei meinem Jump'n Run habe ich nicht überlegt, wie evtl. der Sprung physikalisch korrekt wäre, sondern welche Bedingungen er zu erfüllen hat.

Ich nutze Zeichensatzgrafik in 5 Farben für mein Spiel, wodurch ein Zeichen 4 Pixel breit ist und 8 Pixel hoch. Zwei Zeichen in der Breite ergeben zudem die Breite eines Players.
Soll meine Figur von einer Plattform auf die andere Springen können, so muss diese 2 Zeichen hoch springen können, was 16 Pixel ergeben.
Da die Figur 2 Zeichen breit ist und der Abstand meiner Plattformen 2-3 Zeichen betragen, sollte die Figur 5 Zeichen weit springen können, was umgerechnet 20 Pixel sind.
Sprung.png
Sprung.png (3.93 KiB) 1025 mal betrachtet
Eine weitere Bedingung ist es, über Gegner springen zu können:
Sprung2.png
Sprung2.png (1.87 KiB) 1025 mal betrachtet
Da man i.d.R. recht nah am Gegner steht, bevor man springt, sollte also die Sprungkurve schnell steil ansteigen, dann möglichst lange oben bleiben und dann wieder zum Boden zurück führen.
Ein wenig Realismus soll erhalten bleiben, so dass man die Parameter, schneller Anstieg, der langsamer wird, zum Wendepunkt führt und dann wieder zurück zum Boden beschleunigt, einhalten sollte.

Ich habe 20 Pixel = 20 Schritte für den Sprung, wobei man bei der Hälfte zum Abstieg kommt. Somit 10 Schritte Aufstieg und 10 Schritte Abstieg.
Da mein Gegner ebenfalls 8 Pixel breit und tlw. 16 Pixel hoch ist und man auch etwas Platz für den Sprung benötigt, sollte man den Gegner möglichst schnell überstiegen haben.

Für mich ergaben sich daher folgende Werte:
04 04 04 02 02 01 01 01 01 00 00 01 01 01 01 02 02 04 04 04

5 Schritte braucht es, um gleichauf zu sein, dann folgen 10 Schritte in Sicherheit bevor man ggf. wieder den Gegner berühren kann, da man zu früh gesprungen ist.

Ich weiß nicht, wie andere den Sprung bei sich einprogrammieren, aber da jeder Sprung eine andere Aufgabe hat, wird der Ansatz sicherlich auch ständig ein Anderer sein.

Grüße
Janko

Benutzeravatar
LarsImNetz
Beiträge: 152
Registriert: 24.08.2021 18:27
Has thanked: 109 times
Been thanked: 81 times
Kontaktdaten:

Re: Jump´n Run Sprung

Beitrag von LarsImNetz »

Hallo Janko,

ich habe es ähnlich implementiert bei Night Knight. Müsste es aber noch mal bearbeiten, der Dude springt mir noch etwas zu steif.

Code: Alles auswählen

; TODO: Jumptable anpassen, das nicht zuu gleichmaessig gesprungen wird
@jump_table
 .byte -4,-4,-4,-4,-4,-4,-4,-4,0,0   ; jump up

 .byte  4,4,4,4,4,4,4,4              ; jump down
 .byte  4,4,4,4,4,4,4,4,4,4
 .byte  4,4,4,4,4,4,4,4,4,4
 .byte  4,4,4,4,4,4,4,4,4,4,4,4
 .byte  127                          ; end mark
Der Dude stirbt nicht, wenn er von ganz oben runterspringt.

LG
Lars

Online
Benutzeravatar
Kveldulfur
Beiträge: 624
Registriert: 17.08.2021 02:32
Has thanked: 237 times
Been thanked: 163 times
Kontaktdaten:

Re: Jump´n Run Sprung

Beitrag von Kveldulfur »

Hallo Lars!

Vielen Dank für die Inspiration :-)

Ich hatte meine "Sprung"-Routine in 2 Teile aufgeteilt.
Teil 1 mit SBC, damit meine Figur nach oben springt und nach 10 Schritten den Teil 2 mit ADC, damit die Figur wieder nach unten kommt.
Deine Tabelle nutzt negative und positive Zahlen und darüber habe ich dann nachgedacht... und ich habe verstanden :-)
-4 werden als 252 interpretiert. Wenn ich also nun 100 + 252 rechne kommt 352 heraus, wobei ich nur 8 Bit haben und somit (352-256) 96 erhalten, was das selbe wie bei 100-4 ist.
Okay, dass werden die meisten Programmierer wissen, aber für mich war das wirklich ein super Anstoß darüber nachzudenken.
Nun ist meine Sprung-Routine viel kürzer und flexibler geworden :ugeek:

Danke
Janko

Antworten

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast