Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.08.2014, 14:36

Springen mit Cosinus und Sinus SFML

Ich bin gerade dabei, ein 2D Spiel (Jump n Run) mit SFML zu programmieren. Leider bin ich auf ein Problem gestoßen, wo ich mir selber nicht weiterhelfen kann, nämlich der Sprung meines Players. Ich habe mir überlegt, dass es am Besten ist, wenn ich den Sprung mit Cosinus und Sinus mache, da deren Kurve auch so verläuft, jetzt hängt es nur noch an der Umsetzung bzw. ist das eigentlich so richtig, also mit Cosinus und Sinus den Sprung zu machen ? Könnt ihr mir vlt. helfen, bei der Umsetztung, also wie ich den Sprung am Besten programmiere usw.
Danke schonmal,
LG Niklas

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

21.08.2014, 15:25

Spruenge verlaufen auf einer Parabel.

3

21.08.2014, 15:26

Was genau willst du denn mit Sinus und Cosinus machen?

Wenn du damit unbedingt die "Flugbahn" annähern möchtest, kannst du eine Sinuskurve, die du vorher aus dem §[-1;1]§ Bereich in den §[0;1]§ Bereich transformierst relativ zur Absprunghöhe nutzen, ja.

Der gängige Weg ist aber über "reale" physikalische Berechnungen. Beim Stehen wirkt die Erdanziehungskraft auf dich, nach unten (0, -1, 0). Deine Kollision mit der Erde verhindert, dass du durch diese "Rutscht" und da diese Kollision eine Gegenkraft auswirkt mit selber Stärke, wie die der Erdanziehungskraft, bewegst du dich nicht (0, -1, 0) + (0, 1, 0) = (0,0,0). Beim Sprung lässt du eine weitere Kraft auf dich Wirken, die nach oben gerichtet ist (in die Sprungrichtung). Diese muss natürlich größer sein, als die Erdanziehungskraft. Also in etwa: (0, -1, 0) + (0, 1.5, 0) = (0, 0.5, 0). Du bewegst dich dann also kurzzeitig nach oben. Allerdings wirkt die Erdanziehungskraft im Gegensatz zu deiner ausgeübten Kraft ständig. Also bewegst du dich wieder nach unten. Aufgrund der Erdanziehungsbeschleunigung, passiert das nicht sofort, sondern linear beschleunigt:

  • §\vec{a_g} = \begin{pmatrix}0 \\ -9.81 \\ 0\end{pmatrix}§ ist die Fallbeschleunigung
  • §\vec{a_s} = \begin{pmatrix}0 \\ 1 \\ 0\end{pmatrix} * r§ ist die Beschleungigung für deinen Sprung, wobei §r§ die Stärke dieses Sprungs darstellen soll. Muss größer als 9.81 sein, damit überhaupt etwas passiert.
  • §\vec{a_r} = \vec{a_g} + \vec{a_s}§ist die resultierende Beschleunigung
  • Jetzt die resultierende Geschwindigkeit berechnen:
    §\vec{v_r} = \vec{a_r} * t + \vec{v_0}§ wobei §t§ die Zeit sein sollte, die seit dem letzten Frame vergangen ist.
  • Damit kannst du jetzt eine Mögliche Kollision prüfen und die resultierende Geschwindigkeit aus dem Stoß berechnen.

Et voilà.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

4

21.08.2014, 15:30

Du brauchst eigentlich nur simpelste Physik: deine Figur hat eine position und eine geschwindigkeit. Jeden frame wird die geschw. zur position addiert. Außerdem wird jeden Frame zur geschw. die Gravitation addiert. So würde dein spieler erstmal herunterfallen und schneller werden, wie im echten leben auch ;) soll er jetzt springen, wird einfach bei beginn die y-geschw. auf eine hohe zahl gesetzt. Den rest macht die gravitation.

5

21.08.2014, 15:48

Ohh ok da hatte ich wohl eine falsche Idee, aber diese ganzen Formeln und Zahlen sind irgendwie schwierig, kann mir mal bitte jmd. das so in Code vereinfachen, ich kapiere das irgendwie nicht :dash:

6

21.08.2014, 15:50

Was genau willst du denn mit Sinus und Cosinus machen?

Wenn du damit unbedingt die "Flugbahn" annähern möchtest, kannst du eine Sinuskurve, die du vorher aus dem §[-1;1]§ Bereich in den §[0;1]§ Bereich transformierst relativ zur Absprunghöhe nutzen, ja.

Der gängige Weg ist aber über "reale" physikalische Berechnungen. Beim Stehen wirkt die Erdanziehungskraft auf dich, nach unten (0, -1, 0). Deine Kollision mit der Erde verhindert, dass du durch diese "Rutscht" und da diese Kollision eine Gegenkraft auswirkt mit selber Stärke, wie die der Erdanziehungskraft, bewegst du dich nicht (0, -1, 0) + (0, 1, 0) = (0,0,0). Beim Sprung lässt du eine weitere Kraft auf dich Wirken, die nach oben gerichtet ist (in die Sprungrichtung). Diese muss natürlich größer sein, als die Erdanziehungskraft. Also in etwa: (0, -1, 0) + (0, 1.5, 0) = (0, 0.5, 0). Du bewegst dich dann also kurzzeitig nach oben. Allerdings wirkt die Erdanziehungskraft im Gegensatz zu deiner ausgeübten Kraft ständig. Also bewegst du dich wieder nach unten. Aufgrund der Erdanziehungsbeschleunigung, passiert das nicht sofort, sondern linear beschleunigt:

  • §\vec{a_g} = \begin{pmatrix}0 \\ -9.81 \\ 0\end{pmatrix}§ ist die Fallbeschleunigung
  • §\vec{a_s} = \begin{pmatrix}0 \\ 1 \\ 0\end{pmatrix} * r§ ist die Beschleungigung für deinen Sprung, wobei §r§ die Stärke dieses Sprungs darstellen soll. Muss größer als 9.81 sein, damit überhaupt etwas passiert.
  • §\vec{a_r} = \vec{a_g} + \vec{a_s}§ist die resultierende Beschleunigung
  • Jetzt die resultierende Geschwindigkeit berechnen:
    §\vec{v_r} = \vec{a_r} * t + \vec{v_0}§ wobei §t§ die Zeit sein sollte, die seit dem letzten Frame vergangen ist.
  • Damit kannst du jetzt eine Mögliche Kollision prüfen und die resultierende Geschwindigkeit aus dem Stoß berechnen.

Et voilà.

Das ist so ja sehr klar zu verstehen, aber wie kann ich das nun in meinen C++ Code umsetzten ?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

21.08.2014, 15:54

Multiplikation und Addition ist jetzt nicht wirklich kompliziert. Auch nicht in C++.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

8

21.08.2014, 15:57

Ohh ok da hatte ich wohl eine falsche Idee, aber diese ganzen Formeln und Zahlen sind irgendwie schwierig, kann mir mal bitte jmd. das so in Code vereinfachen, ich kapiere das irgendwie nicht :dash:

Nein. Du verstehst die Physik dahinter nicht. Also verstehst du auch einen gegebenen Code zum schiefen Wurf nicht. Das ist Physik und Mathe. Wenn du Spiele programmieren möchtest, brauchst du beides. Ich schlage dir vor, du holst dir ein hübsches Buch zu Physik, welches Mechanik behandelt. Als Nachschlagewerk kann ich die Bücher von Bernhard Szallies empfehlen:

http://www.amazon.de/dp/3120025089

Großartiges Sammelsurium von Formeln und kurzen, einfachen Erklärungen zu den Gegebenheiten der Physik.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

9

21.08.2014, 16:21

Hier gabs doch mal ein tutorial zum bauen einer simplen physik, oder? :hmm:

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

21.08.2014, 16:30

Fang doch einfach an konkrete Fragen zu stellen anstatt es dir vorkauen zu lassen. Es ist ja normal dass man mal nicht weiter kommt oder einem Wissen fehlt, aber anstatt sich das ganze vorkauen zu lassen bringt es mehr sich vernünftig damit auseinander zu setzen. Wenn du dir die Formeln zum Beispiel anguckst, was davon verstehst du und was nicht? Wo genau sind die Probleme beim Verständnis? So ein Sprung muss auch nicht unbedingt korrekt physikalisch implementiert werden. Es gibt da auch andere Systeme. Die sind dann aber auch nicht unbedingt einfacher als das was hier vorgeschlagen wurde. Vorkauen lassen ist Mist. Entweder man will ein Spiel entwickeln oder ein fertiges Spiel haben.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige