Я пытаюсь создать простую игру в понг на C ++, используя opengl. У меня есть границы, отображаемые на экране, весла, мяч, и все они движутся, так что это здорово! Проблема в том, что шар движется молниеносно даже на один пиксель скорости.
Я обновляю свою позицию в функции обратного вызова, называемой init, которую я затем передаю в glutIdleFunc следующим образом: glutIdleFunc(idle);
функция холостого хода выглядит следующим образом:
void idle(){
ball.moveLeft();
glutPostRedisplay();
}
по сути, я просто перемещаю его на один пиксель влево, но я думаю, что холостой вызов часто вызывают, поэтому он движется молниеносно. Как я могу исправить эту ошибку?
Если вам нужно больше информации, просто спросите!
Используйте таймер GLUT, чтобы пнуть display()
обратный вызов каждые 16 миллисекунд:
void timer( int extra )
{
glutPostRedisplay();
glutTimerFunc( 16, timer, 0 );
}
int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( ... );
glutInitWindowSize( ... );
glutCreateWindow( ... );
...
glutTimerFunc( 0, timer, 0 );
...
glutMainLoop();
return 0;
}
Вот ссылка, которую я нашел на блог, в котором рассказывается о том, как получить излишнее время для отображения кадров в секунду.
http://www.lighthouse3d.com/tutorials/glut-tutorial/frames-per-second/
Вы должны решить, какова скорость вашего мяча в пикселях в секунду. Затем умножьте эту скорость на количество секунд, прошедших между вашим последним обновлением & текущее обновление. Согласно блогу, вы можете получить это через glutGet (GLUT_ELAPSED_TIME). Если это не сработает, обратитесь к Google, чтобы узнать текущее время в миллисекундах на вашей платформе.
Надеюсь это поможет.