我试图制作一个可以在射击子弹周围移动的简单角色。我的事件处理程序目前看起来像这样:
while( SDL_PollEvent( &e ) != 0 ) {
if( e.type == SDL_QUIT ) {
quit = true;
} else if (e.type == SDL_KEYDOWN && e.key.repeat == 0) {
switch (e.key.keysym.sym) {
case SDLK_UP:
p->setVelY(-1);
break;
case SDLK_DOWN:
p->setVelY(1);
break;
case SDLK_LEFT:
p->setVelX(-1);
break;
case SDLK_RIGHT:
p->setVelX(1);
break;
case SDLK_SPACE:
cout << "Firing" << endl;
p->Fire();
break;
}
} else if (e.type == SDL_KEYUP && e.key.repeat == 0) {
...
问题是,如果我拿着空格键,我只想让我的角色射一次。但是现在,它只发射一次,延迟了四分之一秒,然后迅速继续发射。根据我的理解,重复标志是避免这个问题的方法吗?但目前它还没有工作。我看到某处使用扫描码,但我仍然遇到同样的问题。我可以手动制作地图,但我想使用内置方法来避免重复重复。我目前在Ubuntu 16.04上使用SDL 2.0.5。我刚开始使用SDL,所以感谢任何帮助。
编辑:仍然无法正常工作,但我现在看到KEYUP在每次KEYDOWN后的下一帧中立即发生,但随后触发了新的KEYDOWN(我仍然按住键)等等。所以它只是继续快速做keydown和up事件。这甚至不让我自己做出关键按键/释放的映射...任何想法?