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
,如中所述这个答案 https://stackoverflow.com/a/8479379/1907026。问题是,glutPostRedisplay
将当前窗口标记为需要重新显示,但只有在进入后才会完成glutMainLoop
再次。这种情况只发生一次,因此似乎只有一次睡眠有效。
事实上,所有三个睡眠都有效,但 300 毫秒后只能重绘一次。
为了解决这个问题,你必须找到另一种重绘场景的方法。
while(i--){
x_pos += 3;
sleep(100);
yourDrawFunction();
}
假设您正在 UNIX 系统上工作。
休眠 100 毫秒
sleep(100);
这里的问题是,你正在睡眠 100 秒,因为你可能正在使用睡眠功能<unistd.h>
标头,定义sleep()
as:
extern unsigned int sleep (unsigned int __seconds);
你想要的可能是这样的
usleep(100000); //sleeps for 100000 microseconds == 100 ms
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)