有没有办法检查过量的密钥缓冲区

Is there a way to check the glut key buffer?

本文关键字:密钥 缓冲区 检查 有没有      更新时间:2023-10-16

使用解决方案编辑

所以我正在opengl中制作一个粒子系统。我在Linux上工作。我想让它更具互动性,例如,当用户按下空格键时,一个新的烟花就会射出。

我使用GLUT来捕捉键盘输入,当用户按下空格键时,它会发射一个烟花,然后进入一个循环,循环一段时间,如果我再次按下空格键,它必须等到该循环(如上所述)执行完毕后才能注册按键。

所以我的问题是:

在循环开始时,有没有办法检查过量存储按键的缓冲区?我觉得必须有某种缓冲区来存储按键,因为是的,一旦上面的循环执行完毕,它就会注册按键。

解决方案:

实际上,我现在在任何地方都不做任何循环(除了循环通过数组来更新烟花的位置等),我做了一些类似的事情

主要添加以下内容:

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
}

最后,在你的显示功能中,做你需要做的事情来绘制一帧(在我的情况下,循环通过每个烟花并绘制它!)

希望这有帮助:)

你的做法不对。

您的按键处理程序应该而不是在任何内容上循环。您的按键处理程序应该简单地设置一些变量并返回。

您的主显示函数(应该由调用glutPostRedisplay的计时器函数驱动)应该检查此变量。如果设置好了,那么它应该会发射你的烟花并循环一段时间。

在此期间,您的按键处理程序应该忽略任何进一步按下空格键的操作。一旦烟花结束了显示功能,它就可以对进一步的按键做出响应。