Bearbeiten: Ich habe das Problem behoben, indem ich die Sprunggeschwindigkeit so eingestellt habe, dass sie geändert und hinzugefügt wird, und die Geschwindigkeit gleich der Sprunggeschwindigkeit * t ist. Das habe ich gerade:
if (GUI->Space && grounded){
jumpvelocity = -185.f * 2 / gravity;
grounded = false;
}
if(!grounded ){
if(jumpvelocity < terminaly){
jumpvelocity += 185.f * t * 4 / gravity;
yvelocity = jumpvelocity * t;
}
else{
jumpvelocity = terminaly;
yvelocity = jumpvelocity * t / gravity;
}
}
else{
yvelocity = 0.f;
jumpvelocity = 0.f;
}
Danke für die Hilfe.
Ich versuche meine Schwerkraft zum Arbeiten zu bringen. Der Code, den ich bisher habe, ist
if (jumpvelocity < 0){
yvelocity = jumpvelocity * t *2/gravity;
jumpvelocity += 185.f*t * 2 / gravity;
}
else if(!grounded ){
if(yvelocity < terminaly)
yvelocity += t / gravity;
else
yvelocity = terminaly;
}
Die Schwerkraft steigt nach oben, je höher das Fallen und Springen langsamer wird. Der Standardwert ist 1. Die Sprunggeschwindigkeit ist auf 185 eingestellt, wenn der Spieler springen möchte. Mein Problem ist, dass Sie bei einer langsameren Framerate langsamer fallen, aber mit der gleichen Geschwindigkeit springen, als wäre es eine höhere Framerate. Wie würde ich es rahmenunabhängig machen? T ist die Deltazeit.
jumpvelocityBeim Aktualisieren yvelocitywird kein Mittelwert mit dem vorherigen Wert erstellt , was zu einem Genauigkeitsfehler führt, der sich bei niedrigerer Framerate verschlechtert. Was Sie nennen, yvelocitysollte eigentlich sein, ymovementda es sich um eine Geschwindigkeit multipliziert mit der Zeit handelt. Sie aktualisieren, jumpvelocitywenn der Charakter den Boden nicht mehr berührt, was keine physische Bedeutung hat. Ihre Überprüfung terminalyerfolgt vor dem Update, was jumpvelocitydazu führt , dass die terminalyFrameraten größer als und bei niedrigeren Frameraten schlechter werden.