SDL 和 GLFW 每次轮询仅报告一个键(重复),即使同时按住多个键也是如此
SDL and GLFW only report one key (repeat) per poll even if multiple keys are held down at the same time
SDL_Event event;
while(SDL_PollEvent(&event)){
if(event.type == SDL_KEYDOWN || event.type == SDL_KEYUP){
//...
}
}
和
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
}
例如,我同时按 W
和 S
,两个库都报告W
和S
已被按下。
但是,如果我继续按住W
并S
,只会报告一个键,就好像另一个键根本没有按住一样。
此外,如果我按住W
并S
并且只报告S
并且我按另一个键,例如Q
两个库都不会报告当前根本没有按住任何键。
似乎两个库的密钥状态repeated
几乎毫无用处。
这是标准行为还是它只是发生在我的系统上?
在处理SDL_KEYUP
和SDL_KEYDOWN
事件时,可以使用SDL_GetKeyboardState
一次检查多个键的状态。键盘状态保存所有键的当前状态。SDL_GetModState
调用应用于修改键,如 Ctrl 或 Shift。
快速示例:
static void keyboard_handler()
{
int n, count = 0;
char buf[80];
const uint8_t *state = SDL_GetKeyboardState(&count);
buf[0] = 0;
if (state[SDL_SCANCODE_RIGHT]) strcat(buf, "right ");
if (state[SDL_SCANCODE_LEFT]) strcat(buf, "left ");
if (state[SDL_SCANCODE_UP]) strcat(buf, "up ");
if (state[SDL_SCANCODE_DOWN]) strcat(buf, "down ");
if (buf[0] != 0)
printf("%sn", buf);
}
运行它以响应SDL_KEYUP
和SDL_KEYDOWN
事件 一次按住多个箭头键时,我打印了多个单词。 例如:
left
right left
left up down
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 有没有办法在使用 GLFW 按下按键后只处理一个输入事件?
- SDL 和 GLFW 每次轮询仅报告一个键(重复),即使同时按住多个键也是如此
- OpenGL 和 GLFW - 我需要着色器来绘制一个点吗?
- 我使用Microsoft Visual Studio 2013中的GLFW和GLEW库在OpenGL中编写了一个程序.我
- 我需要帮助尝试用MinGW为GLFW编译一个简单的例子
- 指向一个函数,它是一个类成员- GLFW setKeycallback
- c++ OpenGL, GLFW绘制一个简单立方体
- openGL, GLFW, 1281错误在glShaderSource上,下一个glShaderSource工作得很好