您可以使用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