Spielfigur springen lassen
-
Hallo,
ich versuche gerade ein einfaches Spiel zu proggen. Dabei soll ein einfaches Männchen/Spielfigur hochspringen und wieder auf dem Boden landen. Derzeit springt mein Männchen gleichförmig hoch und fliegt auch gleichschnell wieder runter.
Das Springen des Männchen soll so ähnlich aussehen wie beim dem Spiel "Blobbey Volley". Vielleicht kennt ihr ja das Spiel.
Wie muss ich das Springen ändern, dass es realistischer/echter wirkt ?
Gibt vielleicht auch so etwas wie eine "Formel" ?Danke
-
Formel? s=0.5*g*t² ?
Das Prinzip ist einfach, dein Männchen wird beim Sprung ein Anfangsgeschwindigkeit gegeben, sagen wir 50 Pixel/s.
Beim ersten Frame legt dein Männchen 50 Pixel zurück, beim 2. nur noch 49, beim 3. 47 usw.Irgendwie so:
int beschleunigung= -1;
int geschwindigkeit=50;
while(maenchen.pos > 0)
{
maenchen.pos += geschwindigkeit;
geschwindigkeit += beschleunigung;
}
-
ja s= 1/2 * g * t² dachte ich ist die Formel für den freien Fall !
Also dies kann man verwenden wenn das Männchen oben ist und wieder runter fällt.Aber für den Sprung nach oben ? Kann ich da diese Formel auch verwenden ? Oder gibt es dort eine andere ?
-
prozeus schrieb:
ja s= 1/2 * g * t² dachte ich ist die Formel für den freien Fall !
Also dies kann man verwenden wenn das Männchen oben ist und wieder runter fällt.Aber für den Sprung nach oben ? Kann ich da diese Formel auch verwenden ? Oder gibt es dort eine andere ?
Das grundlegende ist die Formel für die gleichmäßig beschleunigte Bewegung.
Die sieht komplett so aus: s(t) = 1/2*a*t2 + v0*t + s0In Deinem Freier Fall Beispiel ist die Beschleunigung = der Erdbeschleunigung (gegeben durch die Erdanziehung), die Startgeschwindigkeit v0 und der Startort s0 waren jeweils 0. Wenn Du hochspringst gibst Du halt noch eine (der Beschleunigung entgegengerichtete) Startgeschwindigkeit mit.
-
Hallo,
danke für eure Antworten.
Ich habe jetzt den Sprung implementiert. Könnt ihr den Code bitte anschauen und sagen ob das ein physikalisch korrekter Sprung ist.
-hier bekommt das Männchen eine Startgeschwindigkeit und fliegt nach oben
-die Geschwindigkeit nach oben wird immer langsamer und irgendwann ist sie NULL.
-> dann wird die Erdanziehung größer als Startgeschwindigkeit und zieht das Männchen nach untenvoid maennchen::springen (void) { //lässt das Männchen mit der angegebenen Geschwindigkeit nach oben springen float fdiff; //Zur Berechnung des Sprung nötig ftime += 0.1; //zeit lokal hochzählen fdiff = istaerke * ftime ; //Konstante Startgeschwindigkeit nach oben //Formel konstante Geschwindigkeit v = s / t //-> s = v * t fdiff = fdiff - (0.5 * 9.81 * (ftime * ftime)); //Auf diese Geschwindigkeit wirkt die Erdanziehung //Formel Erdanziehung s = 1/2 * a * t² //daher muss die Erdanziehung von der Konstanten //Geschwindigkeit abgezogen werden //if(fdiff < 0) //Wenn Männchen am Hochpunkt angekommen //{ //freier_fall(); //eigentlich wollt ich nun hier in die //return; //Methode freier Fall aber seltsam //} //das Männchen fällt auch nach unten, ohne //den freien Fall. Ist das trotzdem korrekt ? iposy -= (int)fdiff; //Positionsveränderung machen if(iposy >= feld.hole_spielfeld_hoehe()-iman_gross) { iposy = feld.hole_spielfeld_hoehe()-iman_gross; bsprung = false; //Sprung beendet ftime = 0; //Zeit Null } }
Mein Problem ist nur ich wollte wenn fdiff < 0 ist die Methode freier Fall. Aber diese Methode brauch ich gar nicht. Das wird ja hier auch erledigt, stimmt das dann trotzdem ?
-
Natürlich, das sollte alles die Formel machen!
Die Startgeschwindigkeit wird ja nur am Anfang gegeben,
die (in die andere Richtung gehende) Beschleunigung wirkt allerdings dauerhaft.
Irgendwann ist die Geschwindigkeit dann null, ab da an zieht die Beschleunigung Deine Figur dann immer stärker nach unten...
-
Alles physikalisch inkorrekt... Das ist ja nichtmal der Luftwiderstand beachtet. Von der Masse des Springers sprechen wir garnicht erst!
Wird das jetzt ein Spiel oder eine physikalische Simulation?
Bye, TGGC \-/
-
Ja, natürlich muss der Luftwiderstand und die Masse der Spielfigur vernachlässigt werden. Außerdem ist Fg auch nicht konstant also auch nicht überall 9.81 und Fg ist auch noch von der Höhe Abhängig.
Die Details sind mir egal, aber gleichförmig soll sich die Figur auch nicht bewegen. Ich will nur wissen ob das im Prinzip so passt und ob das soweit korrekt ist.
Mein Problem war nur, hier wirkt während der ganzen Flugzeit eine gleiche Kraft nach oben. Selbst wenn sich das Männchen nach unten bewegt, wirkt immer noch diese Kraft nach oben. Daher habe ich befürchtet, dass diese Kraft nach oben das Ergebnis verfälscht und eventuell inkorrekt ist (während dem Fall nach unten).
Aber wenn ich sgt. Nukem richtig verstanden habe, passt das weil ja die Erdanziehung auch immer größer wird (oder ?) ->DANKE
mfg
prozeus
-
prozeus schrieb:
Ja, natürlich muss der Luftwiderstand und die Masse der Spielfigur vernachlässigt werden.
Die Masse spielt beim idealisierten Fall keine Rolle. Da wird beim Fall alles gleich beschleunigt und zwar mit 9.81 m/s^2
prozeus schrieb:
Außerdem ist Fg auch nicht konstant also auch nicht überall 9.81 und Fg ist auch noch von der Höhe Abhängig.
Allerdings kannste davon ausgehen, dass die Änderungen der Ortskraft nicht sonderlich abweichen wenn deine Spielfigur ein paar Meter springt. Bis sich die Ortskraft ändert muss man sich schon ziemlich weit vom Gravitationszentrum fortbewegen.
cya
liquid
-
LiquidAcid schrieb:
Die Masse spielt beim idealisierten Fall keine Rolle. Da wird beim Fall alles gleich beschleunigt und zwar mit 9.81 m/s^2
Quasi wie im Vakuum.
LiquidAcid schrieb:
Allerdings kannste davon ausgehen, dass die Änderungen der Ortskraft nicht sonderlich abweichen wenn deine Spielfigur ein paar Meter springt. Bis sich die Ortskraft ändert muss man sich schon ziemlich weit vom Gravitationszentrum fortbewegen.
Stimmt so natürlich nicht. Die Gravitationskraft ändert sich auch bei kleinsten Ortsänderungen (bzw. kann sich). Allerdings um einen natürlich äuuuuuußerst kleinen Wert.
-
Die Gravitation ändert sich eigentlich ständig, da ein Massekörper Gravitationswellen in den Raum aussendet und so Energie verliert.
cya
liquid
-
Hmm, falls ihr es nicht mitbekommen habt: ich meine es muss garnicht physikalisch korrekt sein. Schliesslich soll es ja wohl ein Spiel sein! Also kann man Luftwiderstand (Masse und Entfernung sowieso) vernachlässigen, hauptsache es kommt glaubwürdig rüber. Daher halte ich die Frage, ob es jetzt physikalisch korrekt ist, für völligen Blödsinn. Weder muss es das sein, noch ist das überhaupt möglich.
@Liquidacid: Der idealisierte Fall ist aber eben nicht korrekt, der vernachlässigt ja dies alles.
@Sgt. Nukem: Im Vakuum spielt aber die Masse eine Rolle, nur der Luftwiederstand nicht.Bye, TGGC \-/
-
@Liquidacid: Der idealisierte Fall ist aber eben nicht korrekt, der vernachlässigt ja dies alles.
Ich gehe vom idealisierten freien Fall aus. Und wenn man dort die bestehende Formelmenge anwendet dann gibt es sowas wie Luftwiderstand nicht.
Auch geht man dort nicht von einer sich ändernden Ortskraft aus. Das einzige was dort auf den Körper wirkt sind die 9,81 m/s^2 Beschleunigung zum Gravitationszentrum hin.
Sicherlich ist das "so" nicht korrekt, aber es spiegelt idealisierte Bedingungen wieder. Wer die Physik etwas "lebendinger" haben will, der sollte natürlich auch in irgendeiner Weise die Masse des Körper mit ins Spiel bringen um einen angenäherten Luftwiderstand zu simulieren. Das wird in vielen Spielen afaik auch so gemacht. Der Spieler merkt den Unterschied sowieso nicht. Dazu kommt noch, dass zuviel Realismus auch gar nicht gut ist. Ein Spiel sollte Spaß machen, sowas wie einen Doublejump (UT2003/2004) ist physikalisch ja gar nicht möglich (wo stößt sich der Player denn beim Mid-Air-Jump bitte ab??), aber es ist halt ein tolles Feature (Quadjump ist auch lustig, obwohl mir wieder ZU extrem *g*).
So gesehen bin ich derselben Meinung wie du.@Sgt. Nukem: Im Vakuum spielt aber die Masse eine Rolle, nur der Luftwiederstand nicht.
Das ist so nicht ganz korrekt. Link. Auf die Falldauer hat die Masse zB keinen Einfluss.
cya
liquid
-
prozeus schrieb:
Mein Problem war nur, hier wirkt während der ganzen Flugzeit eine gleiche Kraft nach oben. Selbst wenn sich das Männchen nach unten bewegt, wirkt immer noch diese Kraft nach oben. Daher habe ich befürchtet, dass diese Kraft nach oben das Ergebnis verfälscht und eventuell inkorrekt ist (während dem Fall nach unten).
Welche Kraft nach oben soll das denn sein? Die einzige Kraft, die hier wirkt, ist die Erdanziehung, und die wirkt meistens nach unten.
-
TGGC schrieb:
Hmm, falls ihr es nicht mitbekommen habt: ich meine es muss garnicht physikalisch korrekt sein. Schliesslich soll es ja wohl ein Spiel sein! Also kann man Luftwiderstand (Masse und Entfernung sowieso) vernachlässigen, hauptsache es kommt glaubwürdig rüber. Daher halte ich die Frage, ob es jetzt physikalisch korrekt ist, für völligen Blödsinn. Weder muss es das sein, noch ist das überhaupt möglich.
Ach komm! Du willst doch nur Deine physikalische Unwissenheit vertuschen...!! :p
TGGC schrieb:
@Sgt. Nukem: Im Vakuum spielt aber die Masse eine Rolle, nur der Luftwiederstand nicht.
Aber alle Körper (egal welcher Masse) fallen exakt gleich schnell im Vakuum (Galileo). Also hat die Masse jetzt nicht so sonderlich viel Einfluß dort...
Ansonsten schließe ich mich natürlich TGGC an (aber den Honig behalte ich für mich!): Bitte keinen Realismus auf Kosten des Spielspasses!
-
Sgt. Nukem schrieb:
Ach komm! Du willst doch nur Deine physikalische Unwissenheit vertuschen...!! :p
TGGC schrieb:
@Sgt. Nukem: Im Vakuum spielt aber die Masse eine Rolle, nur der Luftwiederstand nicht.
Aber alle Körper (egal welcher Masse) fallen exakt gleich schnell im Vakuum (Galileo). Also hat die Masse jetzt nicht so sonderlich viel Einfluß dort...
Nimmt man die Erde als Bezugspunkt, fallen schwere Körper durchaus schneller als leichte. Naja bei deiner "physikalischen Unwissenheit"...
Bye, TGGC \-/
-
Ich nehm' aber nicht die Erde als Bezugspunkt, sondern das Gegenteil von void.