4

我正在尝试使用 opengl 在 C++ 中创建一个简单的乒乓球游戏。我在屏幕上显示了边框,桨,球,它们都在移动,太棒了!问题是,即使以一个像素的速度,球也会以闪电般的速度移动。

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

空闲函数如下:

void idle(){
    ball.moveLeft();

    glutPostRedisplay();
}

本质上,我只是让它向左移动一个像素,但是,我猜空闲被调用了很多,所以它移动得很快。如何修复此错误?

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

4

2 回答 2

2

使用 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;
}
于 2013-02-19T03:45:07.813 回答
2

这是我找到的一个博客链接,该链接讨论了如何获得过剩时间以显示每秒帧数。

http://www.lighthouse3d.com/tutorials/glut-tutorial/frames-per-second/

您需要确定球的速度(以像素/秒为单位)。然后将该速度乘以上次更新和当前更新之间经过的秒数。根据博客,您可以通过 glutGet(GLUT_ELAPSED_TIME) 获得此信息。如果这不起作用,请谷歌了解如何在您的平台上找到当前时间(以毫秒为单位)。

希望这可以帮助。

于 2013-02-19T03:49:11.553 回答