我以为我是在跳过一个水坑,而是倒入了海洋:/
我正在尝试实现5秒计时器(不需要超过毫秒)。
我的目标:
// I start the program in gamestate 0...
{
if (button_has_been_pressed == 1)
{
gamestate = 1;
}
}
if (gamestate==1)
{
//wait for 5 seconds and go to gamestate2
gamestate = 2;
}
我尝试了以下内容:
GLUT_TIME_ELAPSED测量从程序开始的时间。进入gamestate1后,我无法'重置'GLUT_TIME_ELAPSED。否则,它会很有效。
gettimeofday给了我比我需要的更多的分辨率。最多可以使用毫秒。
无论我的解决方案需求如何,我都试过宋浩的方法:
gamestate1_elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
gamestate1_elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // us to ms
// add that elapsed time together, and keep track of its total
//r_gamestate1_elapsedTime_total = gamestate1_elapsedTime;
//if (r_gamestate1_elapsedTime_total > 5 seconds) ...
但是,gamestate1_elapsedTime似乎有一些变化。因为输出很少一致。我想这是b / c gettimeofday使用CPU时间(?),我用fps钳夹人为地夹住它。
如上所述,GLUT_ELAPSED_TIME运行良好,但我无法在程序中途重置它,而我的5秒钟不再依赖于我的初始按钮点击。
如果你能提出一些建议,我会非常感谢你们朝着正确的方向努力。非常感谢你提前。
-kropcke
答案 0 :(得分:0)
您无需“重置”GLUT_ELAPSED_TIME,只需将其复制到可用作偏移的位置即可。例如:
int timeAtReset = glutGet(GLUT_ELAPSED_TIME);
// I start the program in gamestate 0...
{
if (button_has_been_pressed == 1)
{
gamestate = 1;
timeAtReset = glutGet(GLUT_ELAPSED_TIME);
}
}
if (gamestate==1)
{
int timeSinceReset = glutGet(GLUT_ELAPSED_TIME) - timeAtReset;
// use timeSinceReset, instead of glutGet(GLUT_ELAPSED_TIME), to
// wait for 5 seconds and go to gamestate2
gamestate = 2;
}