【发布时间】:2012-07-26 19:17:21
【问题描述】:
我每秒运行 n 次 update() 方法来“更新”用户的键盘输入,以便稍后在程序的逻辑部分中读取它。所以我在 SDL Docs 中找到了两种实现方式,但我不确定应该使用哪一种。
1;使用 SDL_PollEvent 循环所有事件,搜索按键向下/向上事件并将按键状态保存在地图中,以便我可以检查程序逻辑中的每个按键状态。
注意:或者,我也可以使用 SDL_PeepEvents 而不是 SDL_PollEvent 来仅获取重要的事件类型;因此,它不会“丢弃”队列中的事件。
std::map<int, bool> keyboard; // Saves the state(true=pressed; false=released) of each SDL_Key.
void update()
{
SDL_Event event;
while( SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
keyboard[event.key.keysym.sym] = false;
break;
case SDL_KEYUP:
keyboard[event.key.keysym.sym] = true;
break;
}
}
}
2;每帧从键盘上截取一张快照,以便我可以轻松阅读。
Uint8* keyboard;
void update()
{
SDL_PumpEvents();
keyboard = SDL_GetKeyState(NULL);
}
使用上述任何一种实现,我都可以像这样阅读keyboard:
if (key_map[SDLK_Return]) printf("Return has been pressed.");
另外,还有其他方法吗?
【问题讨论】:
-
1只是手动实现了2,2有什么问题?您为什么要寻找不同的解决方案?