我的游戏遇到了一个小问题。
这不是什么大问题,但我很想解决这个问题。
所以这是我的输入处理功能:
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();
函数一次)然后暂停几分之一秒然后继续读取输入
我真的不知道如何说出来,但我希望你知道我的意思。
当您在单词中保留任何字母时,您也可以看到此效果。
假设您按 W ,它会立即显示第一个W
,然后在一小段时间之后显示剩余的那个:
w wwwwwwwwwwwwwwwwwwwww
我真的不知道如何解释它。
所以问题是,有没有办法从键盘读取原始输入,所以该功能将被立即连续调用?
答案 0 :(得分:0)
我经常使用这样的代码:
bool keyboard[1<<30];
并在事件循环中
while (SDL_PollEvent(&evnt)) {
switch (evnt.type) {
case SDL_QUIT:
_gameState = GameState::EXIT;
break;
case SDL_MOUSEMOTION:
break;
case SDL_KEYDOWN:
keyboard[evnt.key.keysym.sym] = true;
break;
case SDL_KEYUP:
keyboard[evnt.key.keysym.sym] = false;
break;
}
step();
}
和步骤功能:
void step() {
if(keyboard[SDLK_RIGHT]) player.movePlayer(1);
else if(keyboard[SDLK_LEFT]) player.movePlayer(2);
}