Вы можете использовать gettimeofday , чтобы получить количество секунд плюс количество микросекунд с начала эпохи. Если вы хотите количество секунд, вы можете сделать что-то вроде этого:
#include <sys/time.h>
float getTime()
{
struct timeval time;
gettimeofday(&time, 0);
return (float)time.tv_sec + 0.000001 * (float)time.tv_usec;
}
Сначала я неправильно понял ваш вопрос, но вам может пригодиться следующий метод создания цикла физики с фиксированным временным шагом.
Есть две вещи, которые необходимо сделать, чтобы сделать физический цикл с фиксированным временным шагом.
Во-первых, вам нужно рассчитать время между настоящим моментом и последним временем запуска физики.
last = getTime();
while (running)
{
now = getTime();
// Do other game stuff
simulatePhysics(now - last);
last = now;
}
Затем внутри симуляции физики вам нужно вычислить фиксированный временной шаг.
void simulatePhysics(float dt)
{
static float timeStepRemainder; // fractional timestep from last loop
dt += timeStepRemainder * SIZE_OF_TIMESTEP;
float desiredTimeSteps = dt / SIZE_OF_TIMESTEP;
int nSteps = floorf(desiredTimeSteps); // need integer # of timesteps
timeStepRemainder = desiredTimeSteps - nSteps;
for (int i = 0; i < nSteps; i++)
doPhysics(SIZE_OF_TIMESTEP);
}
Используя этот метод, вы можете задать любой физический процесс (в моем примере - doPhysics) фиксированный временной шаг, сохраняя при этом синхронизацию между реальным временем и игровым временем, вычисляя правильное количество временных шагов для моделирования с момента последнего запуска физики. .