我正在尝试用C++用opengl创建一个简单的乒乓球游戏。我让边框显示在屏幕上,球拍,球,它们都在移动,所以这很棒!问题是,即使在一个像素的速度下,球也会以闪电般的速度移动。
我在一个名为init的回调函数中更新它的位置,然后将其传递给glutIdleFunc,如下所示:glutIdleFunc(idle);
idle函数如下:
void idle(){
ball.moveLeft();
glutPostRedisplay();
}本质上,我只是让它向左移动一个像素,但是,我猜idle被调用了很多,所以它移动得非常快。如何修复此错误?
如果你需要更多的信息,尽管问吧!
发布于 2013-02-19 11:45:08
使用超量计时器每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;
}发布于 2013-02-19 11:49:12
这是我找到的一个博客的链接,该博客讨论了如何在glut中获得显示每秒帧数的时间。
http://www.lighthouse3d.com/tutorials/glut-tutorial/frames-per-second/
你需要决定球的速度是多少,以像素/秒为单位。然后将该速度乘以上次更新和当前更新之间经过的秒数。根据博客的说法,你可以通过glutGet(GLUT_ELAPSED_TIME)获得这个。如果这不起作用,谷歌如何在你的平台上找到以毫秒为单位的当前时间。
希望这能有所帮助。
https://stackoverflow.com/questions/14949441
复制相似问题