Я пытаюсь реализовать простой алгоритм прыжка, который должен быть FPS-независимым.К сожалению, игрок прыгает на 1,6-1,9 блоков со скоростью 1-5 кадров в секунду, но 1,2 блоков со скоростью 60 кадров в секунду.
Прежде всего, ускорение уменьшается на GRAVITY * time for the last frame
.Если у-позиция меньше 0,15, игрок начинает новый прыжок (yAcceleration
установлен на JUMP_POWER
).
private static final float GRAVITY = 9;
private static final float JUMP_POWER = 4.4f;
private static final float TOLERANCE = 0.15f;
private float yAccleration;
private float positionY;
//delta is in seconds
private void update(float delta) {
yAccleration -= GRAVITY * delta;
if(positionY <= TOLERANCE) {
yAccleration = JUMP_POWER;
}
float newYPosition = positionY + yAccleration * delta;
if(newYPosition > 0) positionY = newYPosition;
}
Это код, который я использую для вызова update()
в моем тестовом примере:
final float fps = 60;
final float deltaSeconds = 1f / fps;
while(true) {
update(deltaSeconds);
Thread.sleep((int) Math.round(deltaSeconds * 1000));
}
Что мне нужно изменить, чтобы сделать мой алгоритм независимым от FPS?