LINUX.ORG.RU

GLFW, Глюки с таймером


0

1

У меня какие-то не понятные глюки, расчитываю простейшую физику для игры, но чтобы скорости движения персонажа были одинаковыми при разных 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;
}

★★★

Последнее исправление: Int64 (всего исправлений: 3)

мда, короче решил проблему так:

PhysTime += DeltaTime;
//
if (PhysTime >= 0.01f) {
	Core->Step(PhysTime);
	PhysTime = 0.0f;
}

Int64 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.