我在类似乒乓球的游戏中遇到 SDL 2.0 键盘输入问题。当我通过按向左箭头命令向左移动时,它由 SDL_PollEvents() 处理,如果按下一次键则正确响应。但是,如果我按住该键,我会在连续移动之前得到短暂的延迟(只要 Windows 键重复延迟)。
这里是函数处理事件:
void Event::PlayerEvent (Player &player)
{
while (SDL_PollEvent (&mainEvent))
{
switch (mainEvent.type)
{
case SDL_KEYDOWN :
switch (mainEvent.key.keysym.sym)
{
case SDLK_ESCAPE :
gameRunning = false;
break;
case SDLK_LEFT :
player.moving = player.left;
break;
case SDLK_RIGHT :
player.moving = player.right;
}
break;
case SDL_QUIT :
gameRunning = false;
}
}
}
编辑:毕竟,我设法通过调用解决了这个问题 程序开始时的 SystemParametersInfo (SPI_SETKEYBOARDDELAY, 0, 0, 0) 和结束时的 SystemParametersInfo (SPI_SETKEYBOARDDELAY, 1, 0, 0),以返回标准按键重复延迟。
最佳答案
对于游戏移动,您通常不会使用事件,而是使用状态。
尝试在事件循环之外使用 SDL_GetKeyboardState():
const Uint8* keystates = SDL_GetKeyboardState(NULL);
...
if(keystates[SDL_SCANCODE_LEFT])
player.moving = player.left;
else if(keystates[SDL_SCANCODE_RIGHT])
player.moving = player.right;
关于c++ - SDL 2.0 按键重复和延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29373203/