Slick2D Gravitation Jump Run

So, jetzt melde ich mich auch mal zu Wort, ich hab hier mitgelesen, sogar nicht ganz so sporadisch. Gravitation ist eine Konstante oder Variable, aber kein Vektor. Ein Vektor hat meist mehrere… wie nenn ich das jetzt… Komponenten/Dimensionen/Elemente. Ein 1-Vektor ist eher ungewöhnlich. - Aber darum geht es gar nicht. Die Frage ist nicht gut beschrieben. Zuerst ging es darum, dass Vektor im Englischen oder so VeCtor heißt, also mit C - IMMER mit C. Dann ist von einer “addForce”-Methode gefragt, aber völlig aus dem Kontext gestellt. Du sagtest vorher nicht, welche Bib., welches Buch, welches Spiel, welcher Code - UND VOR ALLEM: welcher Kenntnisstand. Machst du das nur so nebenbei oder hobbymäßig oder studierst das oder wtf.^^

Wenn es nur um einen Wurf, ein Hüpfen, einen Bogen oder wtf geht, dann ist die Erdanziehungskraft völlig außen vor… dann müsstet du nach BW suchen.

[OT]Oder… Jetzt mal OFFTOPIC(!!!) Du denkst sicher, dass viele von uns eine Glaskugel habn und dann Abrakadabra hokus pokus fidibus machen - DAS stimmt auch, aber wir können trotzdem immer noch nicht deine Gedanken lesen![/OT]

Hähwas?! Äh ja, ich bin wach! :o)

Im Ernst: Das Problem ist, dass du mit Halbwissen und unklaren Aussagen und Fragen Sachen durcheinanderwirst, die eine klare, fokussierte Antwort unmöglich machen. Bis zu einem gewissen Grad unterscheidet sich ein Forum GERADE bei sowas von Q&A-Seiten, wo Nazihafte Qualitätskriterien für Fragen gelten, und eine unklare Frage in die Hölle down-gevotet wird, aber … ein bißchen Struktur und Systematik wäre schon hilfreich.

Als nächstes wird das „Newtonsche-Gravitationsgesetz“ herangezogen. Bei diesem Gesetz geht es um die Massenanziehung, also zwei Körper die sich gegenseitig mit einer bestimmten Kraft anziehen. Genau diese Kraft möchte ich nun berechnen, das mache ich mit der Formel: F = (Gm1m2)/r^2.

FALLS du tatsächlich vor hast, für „m1“ die Masse von Mario einzusetzen (ca. 70kg), und für „m2“ die Masse der Erde (ca. 5972000000000000000000000 kg (!)), dann sollte eigentlich klar sein, dass das keinen Sinn macht.

Anschließend muss ich meinen Vektor auf die korrekte Länge setzen mit meiner gerade eben berechnete Beschleunigung mit: „setForce(Beschleunigung)“.

Eine Methode namens „setForce“ sollte tunlichst eine „Force“ (Kraft) übergeben bekommen, und keine „Beschleunigung“ (Acceleration), aber im folgenden Abschnitt…

Denn die Bewegung meiner Spielfigur hängt nicht nur von der Gravitationskraft sondern auch von der Beschleunigung ab, da die Masse eine Rolle spielt.
Jetzt kommt der Punkt wo ich nicht mehr weiter komme, ab hier muss ich meinen Vektor zur Bewegung meiner Spielfigur hinzuaddieren.
Das macht man laut dem Buch mit der „addForce-Methode“ die ich ja nicht habe.
Deshalb habe ich euch gefragt, wie man einen Vektor zu der Bewegung einer Spielfigur hinzuaddiert, damit ich diese Methode selber programmieren kann?

…werden die Begriffe noch übler gemischt. Die Zusammenhänge zwischen den ganzen Größen wurden schon erklärt (wenn auch nicht so strukturiert, wie das bei einer konkreteren Frage möglich gewesen wäre)

  • Zwischen zwei Massen wirkt eine Kraft. Die Gravitationskraft (Force).
  • Wenn eine Kraft auf eine Masse wirkt, dann erfährt diese Masse eine Beschleunigung (Acceleration)
  • (Im Falle von Mario+Welt sind diese Kräfte egal (!). Man kann direkt mit der Beschleunigung rechnen. Das wäre dann die „Gravitationsbeschleunigung“ oder auch „Erdbeschleunigung“, und die ist 9.81 m/s*s. Das, was in dem Buch beschrieben wird, hat mit deinem Andwendungsfall so gesehen nichts zu tun. Dort werden Sachen berechnet, die du schlicht nicht brauchst)
  • Wenn eine Beschleunigung auf eine Masse wirkt, dann ändert diese Beschleunigung im Lauf der Zeit die Geschwindigkeit (Velocity) der Masse
  • Wenn eine Masse eine Geschwindigkeit hat, dann ändert diese Geschwindigkeit im Lauf der Zeit die Position (Position) der Masse

Poste erstmal deine Klasse für die Spielfigur, so, wie sie jetzt ist. Danach kann man weitersehen.

Waagerechter und schräger Wurf | LEIFI Physik

Viel Spaß dabei. Ich hab mich damals geweigert, das zu implementieren, weil sich (schonwieder) Mathematiker daran ausgelassen haben.

Und ich muss mich korrigieren, die Erdanziehungskraft/g-Kraft ist dabei doch wichtig (wiees scheint).

Und genau diese Gleichungen haben mit dem, worum es hier geht, praktisch nichts zu tun… (nicht beirren lassen)

Ich dachte, dass das Männechen im Vorwärtslauf springen können soll… Dann hab ich das Ganze falsch aufgefasst - und auch immer noch nicht die Frage richtig verstanden.

Wie schon mehrfach im Thread erwähnt, sind x- und y-Komponente der Bewegung voneinander unabhängig. Die Parabel, die du siehst, ist eine Überlagerung von einem Wurf senkrecht nach oben mit anschließenden Fall nach unten (wo Gravitation beschleunigend auf das Objekt wirkt) und einer gleichmäßigen Vorwärtsbewegung (wo Gravitation nicht wirkt). Beide Komponenten der Bewegungen werden nur vektoriell “zusammenaddiert”, aber sie beeinflussen sich in keiner Weise.

@Marco13 : Du nennst die Klasse den “springenden” Punkt, obwohl der Punkt nur runterfällt und liegen bleibt? Wäre da nicht “der fallende Punkt” oder so besser?

Springen tut er übrigens mit body.getVelocity().y = - body.getVelocity().y; in collisionDetection().

Das kann mit den Cursortasten Jump+Run-Mäßig gesteuert werden. Links+Rechts, und nach oben zum Springen. Das könnte ich stundenlang machen :smiley:

Ein „physikalisch korrektes Abprallen“ ist gar nicht so leicht. Da spielt dann auch die Elastizität eine Rolle, und man müßte die (halbherzig reingepfuschte) Dämpfung verbessern (sonst würde er ja „ewig weiterspringen“), und insbesondere die Kollisionserkennung müßte deutlich verbessert werden. DAS wird dann RICHTIG aufwändig (kontinuierliche Kollisionserkennung, anyone?)

[OT]Viel Spaß :o)
https://books.google.de/books?id=lKFs4XbE4IEC&pg=PA19&lpg=PA19&dq=kontinuierliche+kollisionserkennung&source=bl&ots=VV2k6mG7k6&sig=vxgm00n5DiYg-LfZTB3CR5mYO2s&hl=de&sa=X&ved=0ahUKEwjwu-v-k9HOAhXhBsAKHcM7AsYQ6AEIIzAB#v=onepage&q=kontinuierliche%20kollisionserkennung&f=false[/OT]

Kollisitionserkennung mit dem Boden sollte doch kein Problem sein. Aber danach ist hier nicht gefragt. Er will einfach nur (physikalisch korrekten) Sprung mithilfe der Erdanziehungskraft/g-Kraft berechnen.

Und wenn ich etwas drüber nachdenke (betrunkenen Kopfs), dann macht ein 2D-Jump-And-Run doch eben deshalb Spaß, weil man sich „in der Luft“ (seitlich) bewegen kann, also nicht physikalisch korrekt ist. :slight_smile:

Was meint ihr dazu?

Edit: Außerdem kann man sich „im Sprung“ bewegen - es gibt immer noch den Luftwiderstand? Oder falsch?

Die Kollisionserkennung für ein Jump+Run ist (auch wenn das jetzt nach einem Widerspruch zu vorher gesagtem klingt) vergleichsweise trivial, selbst wenn man sie kontinuierlich macht: Es geht nur um 2D, und meistens bewegt sich nur EINS der beiden Objekte. Vor allem ist die Kollisionsantwort meistens auch recht überschaubar: Entweder, die Kollision ist vollkommen unelastisch (wie beim Boden), oder es passiert irgendwas (z.B. eine Münze oder ein Pilz steigt aus einem Block auf :D). Im Gegensatz dazu ist die Frage, wann zwei bewegte Dreiecke in 3D sich berühren etwas fummeliger (http://www.cc.gatech.edu/~jarek/graphics/papers/06CollisionCourseSIG04.pdf, um Seite 97 rum…). Aber auch wenn das alles “vergleichsweise” einfach ist, ist es u.U. richtig aufwändig, das so zu implementieren, dass die Figur eben NICHT “manchmal durch irgendwas durch fällt” und “machnal an einer unsichtbaren Ecke hängenbleibt”…

Die Figur darf nicht in etwas eindringen, das wäre die erste Aufgabe. Durch etwas durchdringen oder auf „unsichtbarer“ Ecke „stehen“, ist bei kontinuierlicher/dynamischer Kollisionserkennung doch gar kein Problem.

Aber erst mal ist der Sprung das Problem.

Was hat man denn da? Zeit, Position, Richtung, Beschleunigung? Sollte doch kein Problem sein. Richtung und Beschleunigung ändern die Position; Zeit ändert Richtung und Beschleunigung.

Also ich stelle mir das nicht so schwierig vor. Auch in 3D ist, wenn mit 2D richtig, nicht so schwer (lässt man alles drumherum mal weg).

Wichtig ist nur, was ist jetzt eine Konstante oder Variable, ein Vektor (oder eine Matrix). Da einfach einlesen und Wissen aneignen.

[OT]Eigentlich ist das alles nicht schwer, eigentlich bin ich gar nicht betrunken, eigentlich ist noch nie ein Sack Reis in China umgefallen, eigentlich eigentlich.^^ Bin dann mal sleeping.[/OT]

Edit: In der Luft bewegen geht nicht, aber wieso kann man eigentlich, physikalisch korrekt erklärt, Schaukeln? Ich hab doch keine feste Oberfläche usw. Man würd erwarten, dass der „Pendelschlag“ immer kleiner wird.

Zum Schaukeln: Durch das Verlagern des Schwerpunktes.

@Marco13 : Aber ich hab es doch richtig beschrieben, oder?:

Das müssten die Basics von Bewegung sein, oder?

Wenn man es mathematisch betrachtet, dann ist auch egal, in welcher Dimension man sich bewegt, stimmt’s?

Was soll ich noch schreiben, ich kann erst wieder was schreiben, wenn sich TO nochmal melden tut.

Grüße

@CyborgBeta
Dazu muss man “Momente” Verstehen. Das sind um sich drehende Bewegungen auf einer Fläche.
Beim Schwingen der Beine erzeugt du ein Moment um deine Knie, dieses verschiebt sich in die Nähe der Aufhängung der Schaukel und erzeugt eine sich drehende Beschleunigung um eben diese Aufhängung.

Moment… das hat doch mit der eigentlichen Bewegung nichts zu tun?

Jedenfalls hatte ich in #27 ja schon geschrieben

[QUOTE=Marco13]
Das Objekt hat

  • Position
  • Geschwindigkeit
  • Beschleunigung (=Kraft/Masse)

In jedem Zeitschritt, dessen Dauer mal mit “t” beschrieben sei, macht man

  • NeuePosition = Position + t * Geschwindigkeit
  • NeueGeschwindigkeit = Geschwindigkeit + t * Beschleunigung
  • NeueBeschleunigung = Kraft / Masse

Und dabei ist egal, ob das ganze nun 1D oder 2D ist. [/QUOTE]