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
Gravitation 2D Jump n' Run
-
- Beiträge: 6917
- 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
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
Mit Java und C/C++ sehe ich rot
Re: Gravitation 2D Jump n' Run
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.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
-
- Beiträge: 6917
- 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
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
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2120
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Gravitation 2D Jump n' Run
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:
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
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;
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