【发布时间】:2014-04-05 02:16:04
【问题描述】:
在 SDL 中曾经有一个名为 SDL_EnableKeyRepeat() 的函数,但在 SDL2 中不再存在。
我在 SDL2-wiki 中四处搜索,但没有找到任何相关内容。
有什么想法吗?
【问题讨论】:
-
如果这些答案真的是最好的解决方案,那似乎是错误的。 “key down”应该是指物理按下键时。任何类型的自动重复都应该是可选行为。
在 SDL 中曾经有一个名为 SDL_EnableKeyRepeat() 的函数,但在 SDL2 中不再存在。
我在 SDL2-wiki 中四处搜索,但没有找到任何相关内容。
有什么想法吗?
【问题讨论】:
在处理键盘事件时,只需过滤掉所有重复事件,即检查SDL_Event union 的SDL_KeyboardEvent 的repeat 字段。
例如:
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
}
if (event.type == SDL_KEYDOWN && event.key.repeat == 0) {
if (event.key.keysym.sym == SDLK_d)
debug = debug ? false : true;
// ... handle other keys
}
}
【讨论】:
SDL_GetKeyboardState 函数可能会更好地为您服务,它会告诉您所有按下的键。您也可以只检查事件中的repeat 标志,并在重复为真时忽略。
【讨论】:
您可以自己做,通过将“向下”键添加到列表中并在捕获 KEY_UP 时将其删除,并且在每一帧您可以迭代列表以了解哪个键仍然向下。
【讨论】: