【发布时间】:2015-03-31 16:04:40
【问题描述】:
我在类似乒乓球的游戏中遇到 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) 在程序结束时返回标准键重复延迟。
【问题讨论】:
-
看看this教程。作者使用了2个技巧:(1)按键影响物体速度而不是位置; (2) 检测按键向下和向上以及过滤的重复。因此,当按键按下时,速度会增加。一旦增加,继续按下不会改变它,所以对象继续移动。当键向上时,速度降低,物体停止移动。这可能有助于解决您的延迟问题。
-
它减少了一点延迟,但仍然不是我想要的。
-
在对代码进行了一些调整之后,我必须说本教程是解决我的问题的正确方法。我摆脱了延迟。非常感谢。
标签: c++ keyboard-events sdl-2