gettimeofdayを使用して、ゲームループを特定のFPSにクランプしようとしています。これは非常に初歩的なゲームなので、私の処理能力をすべてかみ砕き続けます。
FRAMES_PER_SECONDをどれだけ低く設定しても、可能な限り高速に実行しようとし続けます。
私はdeWiTTERSがゲームループについて何を言っているかについてかなり良いハンドルを手に入れましたが、私はMacを使用しているGetTickCount b/cの代わりにgettimeofdayを使用しています。
また、私はOSXを実行していて、C ++、GLUTを使用しています。
これは私のメインがどのように見えるかです:
int main (int argc, char **argv)
{
while (true)
{
timeval t1, t2;
double elapsedTime;
gettimeofday(&t1, NULL); // start timer
const int FRAMES_PER_SECOND = 30;
const int SKIP_TICKS = 1000 / FRAMES_PER_SECOND;
double next_game_tick = elapsedTime;
int sleep_time = 0;
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize (windowWidth, windowHeight);
glutInitWindowPosition (100, 100);
glutCreateWindow ("A basic OpenGL Window");
glutDisplayFunc (display);
glutIdleFunc (idle);
glutReshapeFunc (reshape);
glutPassiveMotionFunc(mouseMovement); //check for mouse movement
glutMouseFunc(buttonPress); //check for button press
gettimeofday(&t2, NULL); // stop timer after one full loop
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // compute sec to ms
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // compute us to ms
next_game_tick += SKIP_TICKS;
sleep_time = next_game_tick - elapsedTime;
if( sleep_time >= 0 )
{
sleep( sleep_time );
}
glutMainLoop ();
}
}
gettimeofday関数とsleep関数を複数の場所に配置しようとしましたが、それらのスイートスポットが見つからないようです(コードが正しい場合でも)。