Jump'n'Runゲームでは、ジャンプをしようとしていますが、この機能が見つかりました。 問題は今、この関数は、フレームレートジャンプ機能 - フレームレートが異なる
public void jump() {
ySpeed = -100;
}
// time_diff is time difference between this and last frame
public void update(double time_diff) {
y = y - ySpeed * time_diff;
ySpeed = ySpeed + 9.81 * time_diff;
}
に基づいて、私の性格ジャンプ異なる高さの原因となります例1のように、時にはそれが10
あるフレームレート(time_diffが)ので、時にはそれをシステム上で異なることです
また、フレームレート4と20の例もあります(値を20で割ったため、値が正確ではありません)が、フレームレートが20の場合、フレームレート4の場合と同様に高くジャンプします。
どのようにフレームレートに関係なくジャンプ高さが常に一定であることをアーカイブするにはどうすればよいですか?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
私はluk2302の助けwhithこのようにそれを解決:
double remaining_time = 0;
final double step_size = 4;
public void jump() {
ySpeed = -100;
}
// time_diff is time difference between this and last frame
public void update(double time_diff) {
remaining_time += time_diff;
while (remaining_time >= step_size) {
update_helper(step_size);
remaining_time -= step_size;
}
}
public void update_helper(double time_diff) {
y = y - ySpeed * time_diff;
ySpeed = ySpeed + 9.81 * time_diff;
}
'y'の新しい値を' y'の元の値に対して最大化しようとしましたか? –
これはあなたの件名に関する良い話です:https://www.youtube.com/watch?v=hG9SzQxaCm8 – Andreas