您可以使用gettimeofday来获取秒数加上Epoch以来的微秒数。如果你想要的秒数,你可以做这样的事情:
#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在我的例子)一个固定的时间步长,同时保持实时和游戏时间之间的同步,通过计算时间步长的权数自上次模拟实时物理运行。
您发布的代码有什么问题? – interjay 2010-06-04 20:52:54
经过的时间始终是0 :( – Alexandre 2010-06-05 23:29:24