C++OpenGL乒乓球移动过快

C++ OpenGL Pong ball moving too fast

本文关键字:移动 乒乓球 C++OpenGL      更新时间:2023-10-16

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

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

空闲功能如下:

void idle(){
    ball.moveLeft();
    glutPostRedisplay();
}

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

如果您需要更多信息,只需询问即可!

使用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;
}

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

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

你需要决定你的球的速度是多少像素/秒。然后将该速度乘以从上次更新&当前更新。根据博客,你可以通过glutGet(GLUT_ELAPESD_TIME)获得这个。如果这不起作用,谷歌一下如何在你的平台上找到以毫秒为单位的当前时间。

希望这能有所帮助。