【发布时间】:2014-02-14 05:11:50
【问题描述】:
我正在尝试使用 SDL 2.0.1 开发强大的游戏输入系统。我希望完全没有输入延迟。
我以前使用SDL_GetKeyboardState() 来做这件事,但我改用SDL_Event 和SDL_PollEvent() 来为键盘、鼠标和操纵杆输入提供统一的界面(一切都通过事件完成)。
这很好用,但如果我想在按住键时连续输入(例如移动字符),在 SDL 注意到键被重复之前会有一点延迟。
在 SDL 1.2 中,可以使用函数调用来设置此延迟。现在它不再(据我所知)。
如何消除这种延迟?我应该切换回直接读取键盘状态吗?
作为参考,这是我目前获得输入的方式...
SDL_Event sdlEvent;
while (running)
{
SDL_PollEvent(&sdlEvent);
switch (sdlEvent.type)
{
case SDL_QUIT:
running = false;
break;
case SDL_KEYDOWN:
printf("Key down!\n");
break;
default:
break;
}
}
应用程序打印"Key down!",然后在一小段时间(大约一秒)内什么也没有,然后重复打印直到按键被释放。
那么我该如何摆脱这种延迟呢?
【问题讨论】:
-
在此期间您是否收到该键的
SDL_KEYUP事件? -
没有。在我释放密钥之前,这都是
SDL_KEYDOWN事件。然后它是SDL_KEYUP事件的恒定流(直到我移动鼠标或按下另一个键,所以我猜如果没有事件,SDL_PollEvent(&sdlEvent)不会改变sdlEvent- 有趣)。
标签: c keyboard-events sdl-2