Reputation: 11
I'm having issues detecting when a key has been released. If I were to call:
csdl_setup->GetMainEvent()->key.keysym.sym == SDLK_UP
SDLK_UP would not be true for around 2-3s which is inefficient for a keyboard driven menu. I want to be able to scroll through my menu easily in SDL.
Can anybody help me?
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;
}
Upvotes: 0
Views: 1763
Reputation: 2344
You should be handling events as they come. Your code uses multiple calls to SDL_PollEvent() and even short-circuits the polling in some cases.
Move all of your event handling code into the while loop. Remove the additional checks on the while loop so you stay in the loop until all events are processed.
A quick modification of your code might look something like this:
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;
}
}
Upvotes: 2