Gravitation 2D Jump n' Run

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Sohlus
Beiträge: 1
Registriert: Di 17. Jan 2017, 11:27

Gravitation 2D Jump n' Run

Beitrag von Sohlus »

Hallo werte Profis,
Ich arbeite momentan an einer Projektarbeit mit Lazarus 1.6.2. Mein Ziel war es, ein 2D Jump n# Run Spiel zu programmieren. Dabei stehe allerdings vor - der für mich - größten Hürde, der Gravitation (.. des Balles bzw. der Spielfigur). Wie könnte die Form einer Lösung für dieses Problem aussehen?
Habt ihr da vielleicht ein paar Ideen für mich?
Mit freundlichen Grüßen,
Sohlus

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Gravitation 2D Jump n' Run

Beitrag von Mathias »

Ich denke, in einem Mathe-Forum können die dir besser die Antwort dazu geben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Gravitation 2D Jump n' Run

Beitrag von itjump »

Sohlus hat geschrieben:Hallo werte Profis,
Ich arbeite momentan an einer Projektarbeit mit Lazarus 1.6.2. Mein Ziel war es, ein 2D Jump n# Run Spiel zu programmieren. Dabei stehe allerdings vor - der für mich - größten Hürde, der Gravitation (.. des Balles bzw. der Spielfigur). Wie könnte die Form einer Lösung für dieses Problem aussehen?
Habt ihr da vielleicht ein paar Ideen für mich?
Mit freundlichen Grüßen,
Sohlus

Mit OpenGL, da musst du dich rein arbeiten. Dabei ist es wichtig zu wissen, das es sich hierbei um einen schiefen Wurf handelt (Auch wenn die Spielfigur springt), die Formel bekommst du aus jeder Formelsammlung für Physik aus der Oberstufe, bzw. auch im Internet. Ich denke, die Formel für die Bahnkurve müsste es tun, bzw. evtl. auch die für die Wurfweite (Wie gesagt, OpenGL kenne ich mich nicht aus). Interessant dürften auch die Formeln für den Horizontalen Wurf, den Senkrechten Wurf und den Freien Fall sein. Das ist reine Physik, das Programmiertechnische kann ich dir leider nicht erklären, da ich noch nie mit OpenGL gearbeitet habe.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Gravitation 2D Jump n' Run

Beitrag von Mathias »

Klar würde ich so ein Spiele auch mit OpenGL realisieren. Aber nur zum Gravitationen darzustellen, reicht zB. eine einfache TShape.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Gravitation 2D Jump n' Run

Beitrag von Warf »

Gravitation ist eine Beschleunigung g mit (auf der erde) g = 9.81 m/s^2. Das bedeutet das jede Sekunde sich die Geschwindigkeit Richtung Erdboden um etwa 10 Meter pro Sekunde erhöt. Als Code würde das etwa so aussehen:

Code: Alles auswählen

procedure CalcPosition(Delta: Cardinal); // Delta ist die anzahl an Millisekunden seit dem letzen aufruf von CalcPosition
const
  Gavitation = 9.81;
begin
  if Player.IsInAir then // Spieler steht nicht auf dem Boden -> Freier fall
    Player.Velocity.Y -= Gravitation * (Delta / 1000); // - da die beschläunigung ja nach unten geht (falls boden = 0 und himmel > 0)
  Player.Position.Y += Player.Velocity.Y * (Delta / 1000);
  Player.Position.X += Player.Velocity.X * (Delta / 1000);
end;


Velocity ist geschwindigkeit Position die aktuelle Position beides in Metern (Damit die 9.81 stimmen). Ich bin einfach mal von einem Record mit 2 Double werten, X und Y ausgegangen.

Das Delta musst du halt vor dem Funktionscall berechnen, das solltest du bei OpenGL aber sowiso in jedem Loop machen (GetTickCount sollte dabei helfen, dies existiert dank LCL auch Crossplattform).

Natürlich muss ein spiel auch nicht so super realistisch sein, die Werte können angepasst werden, aber die Formel für Beschläunigung ist so recht simpel

Antworten