Du kannst ja erst mal simpel anfangen. Zusätzlich zur Position merkst du dir die Geschwindigkeit in vertikaler Richtung. Jeden Zeitschritt ziehst du von dieser Geschwindigkeit einen konstanten Gravitationswert ab. Dieser steht in Abhängigkeit von der Zeit. Dadurch fällt dein Charakter nach unten. Kollidiert der Charakter mit dem Boden so setzt du die vertikale Geschwindigkeit auf 0. Bei einem Sprung setzt du die vertikale Geschwindigkeit auf einen relativ hohen Wert.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// variablen:
var verticalSpeed; // vertikale Geschwindigkeit
var yCoordinate; // Position auf der Y Achse
var gravity; // Die Gravitationskonstante
var grounded; // befindet sich der Spieler am Boden
// update-loop wobei deltaTime die vergangene Zeit seit dem letzten Frame in Sekunden ist
if(grounded) {
verticalSpeed -= gravity * deltaTime;
} else {
verticalSpeed = 0;
}
yCoordinate += verticalSpeed;
// Kollisionsbehandlung etc
|
Dieses System ist erst mal recht simpel, funktioniert aber. Das ganze kannst du natürlich mit richtigen Kräften erweitern.
edit: Was noch fehlt:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
// variablen:
var jumpStrength; // Die Sprungkraft
var jumpKeyDown; // Ist die Sprungtaste gedrückt? Alternativ sagt die Variable allgemein aus ob gesprungen werden soll.
// einmal pro Frame:
if(grounded && jumpKeyDown) {
grounded = false;
verticalSpeed = jumpStrength;
}
|
Bei einem Sprung wird die Geschwindigkeit einfach auf einen großen Wert gesetzt. Da die Gravitation jeden Frame von deiner Geschwindigkeit abgezogen wird bewegst du dich jeden Frame etwas langsamer nach oben. Ab einem gewissen Punkt koppt das ganze und du bekommst eine Geschwindigkeit nach unten welche dann mit jedem Frame etwas größer wird. Das ist physikalisch nicht korrekt, reicht aber normalerweise aus.