对于Jump’n’Run游戏,我尝试进行跳转,并且找到了此功能.
问题是系统上的帧速率(time_diff)不同,因此有时作为示例1,有时为10.
现在此功能将导致我的角色根据帧频跳高
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;
}
这也是帧速率4和20的示例(由于我将其除以20,所以值并不精确),但是您看到帧速率20时,它会像帧速率4时一样跳得更高(更远).
因此,无论帧速率如何,我如何归档跳跃高度始终恒定?
——————————–编辑—————— —————–
我通过luk2302的帮助解决了这个问题:
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;
}