У меня какие-то не понятные глюки, расчитываю простейшую физику для игры, но чтобы скорости движения персонажа были одинаковыми при разных FPS, я расчитываю DeltaTime, и перемножаю его на скорость, расчет DeltaTime делаю так:
double currTime = glfwGetTime();
DeltaTime = (currTime - lastTime);
Step(DeltaTime);
Draw();
lastTime = currTime;
если движение персонажа линейное, работает все нормально, т.е. при перемещение персонажа влево/вправо, но если добавить гравитацию и возможность персонажу прыгать, при разных фпс вертикальная скорость разная, я уже что только не перепробовал, все равно одно и то-же, пробовал даже оконный движок менять!
Расчет физики:
void Player::CalcPhysic (const float deltaTime) {
//
float dt = deltaTime*100.0f;
//float dt = 0.1f;
Fg = g*deltaTime;
Vy -= Fg;
int tx; int ty;
//
if (isKey[keyLeftArrow] ) Vx = -2.0f*dt;
else if (isKey[keyRightArrow]) Vx = 2.0f*dt;
if (isKey[keyUpArrow] && !Jump) { Vy = (Fg*40.0f); Jump = true; }
// TODO : Build binary tree
for (int i = 0; i < lvl->Layers[1]->Tiles.size(); i++) {
//
int tmx = lvl->Layers[1]->Tiles[i].X+(lvl->TileWidth >> 1);
int tnx = lvl->Layers[1]->Tiles[i].X-(lvl->TileWidth >> 1);
int tmy = lvl->Layers[1]->Tiles[i].Y+(lvl->TileHeight >> 1);
int tny = lvl->Layers[1]->Tiles[i].Y-(lvl->TileHeight >> 1);
//
if (Position[0]-HalfSize[0]+1 <= tmx & Position[0]+HalfSize[0]-1 >= tnx) {
//
if (Position[1]+Vy-HalfSize[1] <= tmy & Position[1]+Vy+HalfSize[1] >= tny) {
if (Vy < 0) Jump = false;
Vy = 0;
}
}
//
if (Position[1]-HalfSize[1] <= tmy & Position[1]+HalfSize[1] >= tny) {
//
if (Position[0]+Vx-HalfSize[0]+1 <= tmx & Position[0]+Vx+HalfSize[0]-1 >= tnx) {
Vx = 0;
}
}
//
}
//
Position[1] += Vy;
Position[0] += Vx;
//
if (Vy != 0)
Jump = true;
//
Vx = 0;
}