【发布时间】:2017-08-16 15:08:55
【问题描述】:
对于 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;
}
【问题讨论】:
-
尝试最大化
y的新值,而不是y的原始值? -
这是一个关于你的主题的好谈话:youtube.com/watch?v=hG9SzQxaCm8
标签: java game-physics