【发布时间】:2012-04-01 17:20:40
【问题描述】:
用解决方案编辑
所以我在opengl中制作了一个粒子系统。我在 Linux 中工作。我想让它更具交互性,例如,当用户按下空格键时,会发出新的烟花。
我正在使用 GLUT 来捕获键盘输入,当用户按下空格键时,它会射出一个烟花,然后进入一个循环循环一段时间,如果我再次按下空格键,它必须等到那个循环(上面提到的)在注册按键之前执行完毕。
所以我的问题是:
有没有办法让我在循环开始时检查 glut 存储按键的缓冲区?我觉得必须有某种缓冲区来存储按键,因为是的,一旦上面的循环完成执行,它就会注册按键。
解决方案:
我现在实际上并没有在任何地方做任何循环(除了循环通过数组来更新我的烟花的位置等),我做了类似的事情
在 main 中添加:
int main(int argc, char** argv){
//Usual glut initializations
glutTimerFunc(30, update, -1);//says in 30miliseconds call update
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
然后在您的更新函数中(在 glutTimerFunc 的参数中,如下所示:
void update(int k){
//UPDATE POSITION OF FIREWORKS
glutTimerFunc(30, update, -1);//it is important to add this
glutPostRedisplay();//calls display() on the next iteration of glut's main loop
}
最后在你的显示函数中,做任何你需要做的事情来绘制一帧(在我的例子中,循环遍历每个烟花并绘制它!)
希望这会有所帮助:)
【问题讨论】: