我在检测何时释放密钥时遇到问题。如果我打电话给:
csdl_setup->GetMainEvent()->key.keysym.sym == SDLK_UP
SDLK_UP在大约2-3s内不会正确,这对于键盘驱动的菜单而言效率不高。我希望能够在SDL中轻松滚动菜单。
有谁能够帮助我?
SDL_Event event;
while (SDL_PollEvent(&event) && event.key.repeat == 0 && some_sprite->GetY() == coords[1] && event.type == SDL_KEYDOWN)
{
some_sprite->SetY(coords[1] + 20);
}
SDL_PollEvent(&event);
if (event.key.repeat == 0 && some_sprite->GetY() == coords[3])
{
if(some_sprite->GetY() == coords[3] && event.type == SDL_KEYDOWN)
{
some_sprite->SetY(coords[3] + 20);
}
cout << "Event Key Repeat = " << event.key.repeat << endl;
}
最佳答案
您应该在事件发生时进行处理。您的代码使用多次对SDL_PollEvent()的调用,甚至在某些情况下甚至使轮询短路。
将所有事件处理代码移到while循环中。删除while循环上的其他检查,以便您留在循环中,直到处理完所有事件为止。
快速修改您的代码可能如下所示:
SDL_Event event;
while (SDL_PollEvent(&event))
{
if(event.type == SDL_KEYDOWN)
{
if(event.key.repeat == 0)
{
if(some_sprite->GetY() == coords[1])
some_sprite->SetY(coords[1] + 20);
else if(some_sprite->GetY() == coords[3])
some_sprite->SetY(coords[3] + 20);
}
cout << "Event Key Repeat = " << event.key.repeat << endl;
}
}
关于c++ - 如何检测何时释放了 key (SDL 2.0),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24235959/