我试图用opengl在C ++中创建一个简单的乒乓球游戏。我在屏幕上显示边框,划桨,球,所有这些都移动了,所以这太棒了!问题是即使在一个像素的速度下球也能快速移动。
我更新它在一个名为init的回调函数中的位置,然后我将其传递给glutIdleFunc,如下所示:glutIdleFunc(idle);
空闲功能如下:
void idle(){
ball.moveLeft();
glutPostRedisplay();
}
基本上我只是让它向左移动一个像素但是,我猜这个空闲被调用很多所以它快速移动闪电。如何解决此错误?
如果您需要更多信息,请直接询问!
答案 0 :(得分:2)
使用GLUT计时器每16毫秒启动一次display()
回调:
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;
}
答案 1 :(得分:2)
这是我在博客中找到的一个链接,该链接讨论了如何在每秒显示帧数的过剩时间。
http://www.lighthouse3d.com/tutorials/glut-tutorial/frames-per-second/
你需要决定你的球的速度,以像素/秒为单位。然后将该速度乘以上次更新和之间经过的秒数。当前的更新。根据博客,您可以通过glutGet(GLUT_ELAPSED_TIME)获得此信息。如果这不起作用,请谷歌了解如何在平台上找到当前时间(以毫秒为单位)。
希望这有帮助。