gpt4 book ai didi

c++ - 在 OpenGL 中连续暂停

转载 作者:行者123 更新时间:2023-11-30 00:50:03 25 4
gpt4 key购买 nike

void keyPress(unsigned char key,int x,int y){
int i;
switch(key){
case 'f':
i = 3;
while(i--){
x_pos += 3;
sleep(100);
glutPostRedisplay();
}
}
}
  • 以上是在 Windows 7 中使用 GLUT 库用 C++ 编写的代码片段。

  • 此函数采用字符键和鼠标坐标 x,y,并在按下 f 字符时分 3 个连续步骤沿 x 方向执行平移。在每个步骤之间,程序应休眠 100 毫秒。

  • 我们想移动一个机器人,当他向前走几步的时候依次暂停。

  • 我们在让程序在 3 个步骤之间休眠时遇到了问题。上面的代码片段有什么问题?

最佳答案

免责声明: jozxyqk 的答案对我来说似乎更好。这个答案以肮脏的方式解决了这个问题。


你在滥用 glutPostRedisplay ,如 this answer 中所述.问题是,glutPostRedisplay将当前窗口标记为需要重新显示,但只有在进入 glutMainLoop 后才会完成再次。这种情况只会发生一次,因此似乎只有一次 sleep 有效。

事实上,所有三个 sleep 都有效,但在 300 毫秒后你只会重绘一次。

要解决这个问题,您必须找到另一种重绘场景的方法。

while(i--){
x_pos += 3;
sleep(100);
yourDrawFunction();
}

假设您在 UNIX 系统上工作。

sleep for 100 ms

sleep(100);

这里的问题是,你睡了 100 秒,因为你可能正在使用 <unistd.h> 的 sleep 功能。 header ,它定义了 sleep()作为:

extern unsigned int sleep (unsigned int __seconds);

你想要的大概是这样的

usleep(100000); //sleeps for 100000 microseconds == 100 ms

关于c++ - 在 OpenGL 中连续暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com