C ++ OpenGL Pong球移动得太快了

时间:2013-02-19 03:39:44

标签: c++ opengl timer pong

我试图用opengl在C ++中创建一个简单的乒乓球游戏。我在屏幕上显示边框,划桨,球,所有这些都移动了,所以这太棒了!问题是即使在一个像素的速度下球也能快速移动。

我更新它在一个名为init的回调函数中的位置,然后我将其传递给glutIdleFunc,如下所示:glutIdleFunc(idle);

空闲功能如下:

void idle(){
    ball.moveLeft();

    glutPostRedisplay();
}

基本上我只是让它向左移动一个像素但是,我猜这个空闲被调用很多所以它快速移动闪电。如何解决此错误?

如果您需要更多信息,请直接询问!

2 个答案:

答案 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)获得此信息。如果这不起作用,请谷歌了解如何在平台上找到当前时间(以毫秒为单位)。

希望这有帮助。