編集: jumpvelocityを変更して追加するものにし、yvelocityをjumpvelocity * tに等しくすることで問題を修正しました。これは私が今持っているものです:
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;
}
助けてくれてありがとう。
私は重力を働かせようとしています。これまでのコードは
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;
}
重力は上方にスケーリングし、高いほど落下とジャンプが遅くなります。デフォルト値は1です。ジャンプ速度は、プレイヤーがジャンプしたいときに185に設定されます。私の問題は、遅いフレームレートではゆっくりと落ちるが、フレームレートが高い場合と同じ速度でジャンプすることです。フレームに依存しないようにするにはどうすればよいですか?Tはデルタ時間です。
jumpvelocity更新時に以前の値で平均化していないyvelocityため、低いフレームレートでは精度エラーが悪化します。速度に時間を掛けたyvelocityものなymovementので、実際に呼び出すのは当然のことです。jumpvelocityキャラクターが地面に触れなくなったときに更新を行っていますが、物理的な意味はありません。のチェックterminalyは更新前に行われるため、フレームレートが低くjumpvelocityなると、値が大きくなりterminaly、悪化します。