有没有办法检查过量的密钥缓冲区
Is there a way to check the glut key buffer?
使用解决方案编辑
所以我正在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
的计时器函数驱动)应该检查此变量。如果设置好了,那么它应该会发射你的烟花并循环一段时间。
在此期间,您的按键处理程序应该忽略任何进一步按下空格键的操作。一旦烟花结束了显示功能,它就可以对进一步的按键做出响应。
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 允许从 std::map 的密钥窃取资源?
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 如何修复无效的API密钥,IP或操作权限错误?
- 所有可能的链接生成器与64位密钥
- 如何在unordered_map中更改密钥?
- 获取当前密钥状态?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 将密钥发送到非前台的游戏窗口
- 有哪些方法可以对基于 256 位密钥的矩阵进行加扰?
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 如何将CNG密钥转换为OpenSSL EVP_PKEY(反之亦然)?
- 运行密钥密码解密知道密钥?
- std::unordered_map 运算符 [] 是否对非现有密钥进行零初始化?
- 封装 std::map 以允许迭代,但没有直接密钥访问?
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- 有没有办法检查过量的密钥缓冲区
- 加密++ rsa密钥进入缓冲区
- 正在将明文AES 128密钥导出到缓冲区/文件Windows Crypto API c++