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

  • »DerSpieleprogger« ist der Autor dieses Themas

Beiträge: 19

Beruf: Elektroniker

  • Private Nachricht senden

1

24.08.2016, 22:27

Einfache Gravitation für 2D Jump&Run spiel programmieren

Hallo an alle hier :)

Ich bin neu hier im Forum und habe gleich zu Beginn eine für mich sehr wichtige Frage an euch.
Ich programmiere mein erstes 2D Jump&Run spiel in Java mit Slick2D.
Mein großes Problem ist die Gravitation, bei der ich nicht weiterkomme.
Wo ich angefangen habe meine erste Gravitation zu programmieren, da habe ich mir ein paar Tutorials auf Youtube angesehen um zu erfahren wie man eine Gravitation programmiert.
Daraufhin habe ich eine ganz einfache Gravitation programmiert bei der einfach nur eine Variable heruntergezählt wird und dadurch die Position des Spieler verändert wurde.
Da das ganze nicht sehr realistisch wirkt habe ich mich weiter erkundigt und habe erfahren, dass ich eine gute Gravitation mit Vektoren und dem newtonschen Gravitationsgesetz programmieren sollte.
Daraufhin habe ich mir beigebracht wie das newtonsche Gravitationsgesetz aufgebaut ist und was Vektoren sind.
Ab hier komme ich nicht mehr weiter.
Mein Problem, ich weiß nicht wie ich mit dem Code anfangen soll. Was muss ich als erstes machen ?(

Dieses Problem habe ich schon wo anders Diskutiert, doch dort erzählte jeder was anderes. Der eine meinte das newtonsche Gravitationsgesetz ist nicht notwendig für eine Jump&Run Gravitation. Der nächste meinte, dass das Gesetz sehr wohl Wichtig sei usw. usw.
Leider hat mich das nur noch mehr verwirrt und mittlerweile bin ich komplett durcheinander. :dash:
Mir ist es wichtig, das ich Verstanden habe wie einen Gravitation in Java aufgebaut werden muss.
Ich möchte nicht einfach nur einen Code in mein Spiel einbauen, den ich nicht verstehe.

Könnt ihr mir da helfen, das ich mein Ziel erreiche??

MfG

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

24.08.2016, 23:25

Das Newtonsche Gravitationsgesetz ist hier nicht wichtig, denn du willst ja keine Raumfahrtsimulation programmieren. Diejenigen, die meinten, dass das Gesetz doch wichtig sei, haben es vermutlich mit F=m*a verwechselt, denn das ist in der Tat auch hier wichtig.

In einem Jump and Run-Spiel kannst du die Gravitation einfach als eine konstante Beschleunigung nach unten modellieren. Gib dazu jedem Objekt zusätzlich zu seiner Position (x, y) auch noch einen Bewegungsvektor (vx, vy). In jedem (festen) Zeitschritt erhöhst du x um vx und y um vy, jeweils multipliziert mit der Länge des Zeitschritts. Dadurch bewegt sich das Objekt seinem Bewegungsvektor entsprechend.

Für die Gravitation erhöhst du in jedem Zeitschritt vy um die Gravitationsbeschleunigung multipliziert mit der Länge des Zeitschritts, so dass das Objekt eine Beschleunigung nach unten erfährt. Wenn das Objekt den Boden berührt, darf es natürlich nicht weiter fallen, dann setzt du vy immer wieder auf 0.

Wenn das Objekt "springen" soll, setzt du einmalig vy auf einen hohen negativen Wert (angenommen, dass y nach unten größer wird), so dass es erst einmal nach oben fliegt, aber langsam von der Gravitation wieder nach unten beschleunigt wird.

Für seitliche Bewegung (Laufen) machst du Ähnliches mit vx. Wenn der Spieler nach rechts laufen soll, setzt du vx auf einen festen positiven Wert, nach links auf einen festen negativen Wert, ansonsten auf 0. Hier gibt es auch fortgeschrittene Methoden, bei denen das Objekt nicht direkt auf Maximalgeschwindigkeit kommt und auch nicht direkt abbremsen kann (wie bei Super Mario), aber für's Erste sollte das reichen.

3

25.08.2016, 00:01

Ich denke du wirst sehr gut mit einer Gravitaion leben können wenn du als Basis die Formel für Beschleunigung verwendest.

§a = \Delta \vec v / \Delta t§

Wobei §a§ die Beschleunigung ist,
§\Delta \vec v§ der Geschwindigkeitsvektor
§\Delta t§ die Vergangene Zeit (Seit Sprung/Fall beginn)

Es gibt hier im Prinzip 2 Fälle die es zu beachten gilt
  • stehen auf dem Boden
  • springen vom Boden
Beim stehen auf dem Boden, sollte klar sein, dass hier Gravitation zwar vorhanden ist aber auf Spielobjekte keinen Einfluss haben darf.

Interessanter wird es dann bei Punkt 2:
Hier bewegt sich das Objekt mit einer Konstante Geschwindigkeit nach oben (ohne Gravition), dem entgegen wirkt nun aber die Gravitation was im Spiel dann den Effekt hat das sich das Objekt anfangs Stark Richtung oben bewegt dann verlangsamt und schließlich wieder runter fält.
Als Formel sieht das dann so aus:
§\Delta \vec v = v_\text{Sprung} - a * \Delta t§

Nun musst dir überlegen wie du das in Code umsetzt, da hat David vor mir ja auch schon was zu geschriebn.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

  • »DerSpieleprogger« ist der Autor dieses Themas

Beiträge: 19

Beruf: Elektroniker

  • Private Nachricht senden

4

27.08.2016, 19:16

O.K. danke für die Antwort.

Also ist das newtonsche Gravitationsgesetz für mein Spiel nicht Notwendig.
Das heißt ich benötige nur die Formel zur Berechnung der Beschleunigung.

Die lautet wie von euch schon beschrieben:

§ F = m*a §

Für F nehme ich einfach eine konstante Beschleunigung also die sogenannte Erdbeschleunigung.
Diese hat den Wert 9,81m/s^2.
a ist die Beschleunigung die ich ausrechnen möchte.
m ist die Masse die meine Spielfigur hat, hier nehme ich einfach mal einen Wert den z.B. ein Mensch hat also 70kg.

Nun stelle ich die Formel um:

§ a = \frac{F}{m} §

Jetzt habt ihr gesagt, dass ich einen Bewegungsvektor erzeugen soll und diesen dann zur Bewegung des Spielers hinzuaddieren soll.
Um einen Bewegungsvektor zu erzeugen benötige ich entweder einen x und y Wert oder den Betrag des Vektors + Winkel.

Nun habe ich folgende Fragen an euch:

1.
Wie komme ich auf den x & y Wert um den Vektor zu erzeugen.
Wenn ich ein Spiel programmieren würde wo ich z.B. zwei gleich große Planeten hätte dann könnte ich einfach die x & y-Position der beiden Planeten ermitteln und anschließen die Werte voneinander Subtrahieren umso an meinen x &y Wert zu gelangen. Nur wie mache ich das in meinem Spiel?

2.
Wozu benötige ich einen Bewegungsvektor?
Kann es sein, das ich einen Bewegungsvektor deshalb benötige, damit sich die Spielfigur beim hinunterfallen auch nach links und rechts bewegen kann und nicht einfach nur Schnur gerade nach unten fällt?

MfG und schon mal danke für die Hilfe!

6

27.08.2016, 21:41

Also ist das newtonsche Gravitationsgesetz für mein Spiel nicht Notwendig.
Richtig.

Das heißt ich benötige nur die Formel zur Berechnung der Beschleunigung.
Richtig.

Die lautet wie von euch schon beschrieben:
§F = m * a§
Falsch. Die Formel §\Delta \vec v = v_\text{Sprung} - a * \Delta t§ hilft dir weiter bei deinem Problem.


Wie ist dein Mathematischer/Physikalischer Hintergrund?
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

7

28.08.2016, 16:36

§ F = m*a §

Für F nehme ich einfach eine konstante Beschleunigung also die sogenannte Erdbeschleunigung.
Diese hat den Wert 9,81m/s^2.
a ist die Beschleunigung die ich ausrechnen möchte.
Nein. F ist die Kraft. a ist sie Beschleunigung und die willst du nicht ausrechnen, hoechstens festlegen. Sie kann (muss aber nicht) 9,81m/s^2 sein. Da es ein Spiel ist, geht aber auch was Anderes.

  • »DerSpieleprogger« ist der Autor dieses Themas

Beiträge: 19

Beruf: Elektroniker

  • Private Nachricht senden

8

28.08.2016, 19:15

Das ist doch die Formel zur berechnung der Beschleunigung:

§ F = m*a §

Ich muss doch die Beschleunigung "a" für diese Formel ausrechnen:

§ \Delta \vec{v} = vSprung-a*\Delta t §

Wie soll ich sonst auf a kommen?

Wenn ich F mit 9,81 annehme und "m" die Masse mit ca.70kg oder weniger, dann kann ich "a" ausrechnen, wie sollte ich das sonst machen?
Am anfang diese Beitrags hieß es doch, das ich diese Formel brauchen werde:

§ \Delta \vec{v} = vSprung-a*\Delta t §

Das heißt ich brauche diese Formel doch nicht, oder wie?
Sorry, aber ich bin etwas durcheinander jetzt.
Da es zuerst heißt ich benötige diese Formel, dann ist diese doch nicht relevant ?(

Zu meinem Mathematischen & Physikalischen hintergrund:

Ich erklär mal wie ich Sie verstanden habe:

§ \Delta \vec{v} §

Beim §\vec{v}§ handelt es sich um einen Geschwindigkeitsvektor, das Delta davor sagt nur aus, das es sich um eine größe handelt die sich verändert.

VSprung ist die konstante Geschwindigkeit mit der die Spielfigur nach oben springt.

a ist wie gerade eben beschrieben die Beschleunigung die ich mit der einen Formel berechnen wollte.

§\Delta t§ ist die Zeit die der Spieler in der Luft verbringt.

Nur die genauen zusammenhänge sind mir nicht klar. Ist aber wahrscheinlich nicht Notwendig.

9

28.08.2016, 19:24

a ist wie gerade eben beschrieben die Beschleunigung die ich mit der einen Formel berechnen wollte.

Die Beschleunigung a ist in deinem Fall die Gravitiation. Die brauchst du nicht zu berechnen, die ist in deinem Spiel gegeben durch dich als Programmierer.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

10

28.08.2016, 19:25

Grundsätzlich ist alles, in dem a vorkommt und du alle anderen Variablen kennst, eine Formel zur Berechnung der Beschleunigung.
Die Frage ist, ob du a hier überhaupt berechnen willst, normalerweise nimmt man dafür einen festen Wert, denn die Beschleunigung durch Gravitation ist unabhängig von der Masse eines Objekts, was man in deiner F = m*a auch sofort sieht.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige