在SDL2中有一个事件SDL_TextInputEvent,它以OS配置的自然速率从键盘捕获输入。 当我调查事件时,它是这样的:
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_TEXTINPUT:
Input_Listener.last_key = event.text.text;
break;
default:
break;
}
}
event.text.text
是char[32]
,其中包含用户在程序中输入的UTF-8字符。这很好,因为延迟很好,所以如果按住a
键,它将不会尽可能快地插入a
个字符。
但是,此事件似乎无法捕获非字符输入,例如按Enter键或箭头键。但是,我可以像这样捕获它们:
ubyte* states = SDL_GetKeyboardState(null);
if (states[SDL_SCANCODE_BACKSPACE]) {
... do stuff here
}
但是不会导致操作系统延迟,并且会尽快启动。我的程序是一个文本编辑器,但它的编程就像是一个游戏。所以有游戏循环,更新/渲染方法等。这意味着每帧都会不断地进行输入检查。
如何以与配置操作系统相同的延迟速率获取非字符输入?我是否缺少某些功能,或者某种方式可以模拟这个功能?