【发布时间】:2016-01-14 01:09:05
【问题描述】:
我的游戏出了点小问题。
这没什么大不了的,但我很想解决这个问题。
这是我的输入处理函数:
void MainGame::processInput()
{
SDL_Event evnt;
while (SDL_PollEvent(&evnt)) {
switch (evnt.type) {
case SDL_QUIT:
_gameState = GameState::EXIT;
break;
case SDL_MOUSEMOTION:
break;
case SDL_KEYDOWN:
switch (evnt.key.keysym.sym) {
case SDLK_RIGHT:
player.movePlayer(1);
break;
case SDLK_LEFT:
player.movePlayer(2);
break;
}
}
}
}
它工作得很好,但正如您可能想象的那样,当我按下箭头键时,它会移动一次(调用一次player.movePlayer(); 函数)然后暂停几分之一秒,然后继续读取输入。
我真的不知道该怎么说,但我希望你知道我的意思。
当你在word中按住任何字母时也可以看到这种效果。
假设您按 W,它将立即显示第一个 W,然后在几分之一秒后显示其余的:
wwwwwwwwwwwwwwwwwwwww
我真的不知道怎么解释。
所以问题是,有没有办法从键盘读取原始输入,以便立即连续调用该函数?
【问题讨论】:
-
只需自己跟踪 keydown 和 keyup。 wiki.libsdl.org/SDL_GetKeyboardState 你这样做的方式应该主要只用于输入单词的字母,而不是移动控制
-
通常的方法是记住按键是否按下,然后每一帧,如果按键按下,移动播放器。
-
@xaxxon SDL 根据完全相同的事件设置键盘状态
-
关键是不要依赖通知,而是根据需要轮询信息是否已关闭