Как запланировать функцию в GLUT - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть функция, которая вызывается из основной функции. Ниже приведен код.

int main(int argc, char *argv[])

{

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

    glutInitWindowSize (500, 500);

    glutInitWindowPosition (100, 100);

    glutCreateWindow("Game for Gamers");

    glutDisplayFunc(display_func);

    glutKeyboardFunc(keyboard);

    glutSpecialFunc(special);

    glutTimerFunc(50,refreshcheck,0);

    glutIdleFunc (animate);

    glutReshapeFunc (reshape);

    glutMainLoop();


    return 0;

}

Здесь сначала вызывается «refreshcheck», я хочу вызвать функцию «refreshcheck» после выполнения функции «display_func».Как это запланировано. Я хочу сначала вызвать функцию «display_func», когда игра загружена в память перед функцией «refreshcheck», нет необходимости вызывать «refreshcheck» после «display_func», когда игра запущена, но в первый раз этоважно.

1 Ответ

1 голос
/ 13 февраля 2012

В общем случае не следует создавать объекты внутри displayFunc (как правильно указал dark_charlie). Но это просто плохая практика, не более того.

Если вам требуется обнаружение столкновений, вы должны сделать его синхронным с рендерингом, то есть вызвать его из вашего displayFunc (в конце).

Я думаю, причина, по которой вы хотите использовать таймер, состоит в том, чтобы иметь физику постоянного шага. Обычно это делается другим способом, используя gettimeofday () (или GetTickCount () для окон), чтобы получить время, и в зависимости от времени, прошедшего между кадрами, физика называется N раз. Это даст вам гораздо лучшую точность, чем использование таймеров GLUT, поскольку таймеры работают с точностью до 10 секунд миллисекунд, что может быть много при работе с быстро движущимися объектами, что приводит к заиканию.

...