ОС независимая C библиотека для расчета промежутка времени? - PullRequest
1 голос
/ 05 июня 2010

Так что в моей игре мне нужно моделировать физику аппаратно-независимым образом.

Я собираюсь использовать симуляцию с фиксированным временным шагом, но мне нужно уметь вычислять, сколько времени проходит между вызовами.

Я попробовал это и ничего не получил:

#include <time.h>
double time_elapsed;
clock_t last_clocks = clock();
while (true) {
  time_elapsed = ( (double) (clock() - last_clocks) / CLOCKS_PER_SEC);
  last_clocks = clock();
  printf("%f\n", time_elapsed);
}

Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 июня 2010

Вы можете использовать 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) фиксированный временной шаг, сохраняя при этом синхронизацию между реальным временем и игровым временем, вычисляя правильное количество временных шагов для моделирования с момента последнего запуска физики. .

0 голосов
/ 05 июня 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...