我update()
每秒运行 n 次方法来“更新”用户的键盘输入,以便稍后在程序的逻辑部分中读取它。所以我在 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.");
另外,还有其他方法吗?