我遇到了重力随着帧速率变化而严重变化的问题。当我以 160 fps 的速度跑步时,我的玩家在空中跳跃了几米然后摔倒,但在大约 10 fps 的速度下,我的玩家跳跃了半米然后摔倒。我的重力代码如下:
public void fall(long delta) {
float increase = acceleration * ((delta) / 1000000000); //changes delta time (nanoseconds) to seconds
if(player.y + velocity + increase < -1.15f) {
if(velocity + inc < terminal_velocity) {
velocity += inc;
}
player.y += velocity;
}else{
player.y = -1.15f;
velocity = 0;
}
}
我称之为:
while(!close_request) {
now = getTime();
int delta = getDelta(now);
player.fall(delta);
........other functions.........
}
我认为实现 delta 可以防止玩家改变速度过快或过慢,但它实际上让它变得更糟了。我认为这是因为随着帧之间时间的增加,速度的增加也会导致玩家异常快速地摔倒。这是因为随着 FPS 的增加,玩家跳得更高、更高。有任何想法吗?