【发布时间】:2019-06-03 22:42:53
【问题描述】:
我使用 SDL 已经有一段时间了,但现在我在处理键盘事件时似乎一直在做错事。
通常我的主循环看起来像这样:
int main() {
SDL_Init(SDL_INIT_VIDEO);
/* Some video system initializations */
/* Main loop */
for(;;) {
SDL_PumpEvents();
const unsigned char *key = SDL_GetKeyboardState(nullptr);
/* Do something with the keys pressed */
}
}
...这对我来说效果很好。但我最近查看了一些代码示例,从技术上讲,它们都使用不同的模式:
int main() {
SDL_Init(SDL_INIT_VIDEO);
/* Some video system initializations */
/* Main loop */
for(;;) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
/* switch/case to know keys pressed */
}
}
}
查看 SDL 文档后,我发现 SDL_PollEvent 确实调用了 SDL_PumpEvents。 SDL_PollEvent reference
而SDL_PumpEvents 所做的是收集所有输入设备的状态以生成事件对象。 SDL_PumpEvents reference
所以在第一个示例中,我没有刷新事件队列,那么为什么它可以在没有崩溃的情况下工作呢?第二种模式是正确获取输入状态的方式吗?
【问题讨论】: