In my project I am having trouble getting a simple switch statement to work for SDL input. Here is the example:
SDL_Event event;
SDL_PollEvent(&event);
if (event.type == SDL_KEYDOWN)
{
switch (event.key.keysym.sym)
{
case SDLK_a: m_x -= 30;
break;
case SDLK_d: m_x += 30;
break;
case SDLK_w: m_y -= 30;
break;
case SDLK_s: m_y += 30;
break;
}
}
When I run this, first off it seems SDL_KEYDOWN isn't being recognized. Nor are my cases. So I switched the code to:
SDL_Event event;
SDL_PollEvent(&event);
if (event.type == 771)
{
switch (event.key.keysym.sym)
{
case SDLK_a: m_x -= 30;
break;
case SDLK_d: m_x += 30;
break;
case SDLK_w: m_y -= 30;
break;
case SDLK_s: m_y += 30;
break;
default: m_y += 1;
}
}
This causes the default case to run when I hold or press any key, so my object moves according to m_y += 1. If I remove the default case and try pressing w,a,s, or d, nothing happens. If i keep m_y += 1, but use SDL_KEYDOWN instead of 771, nothing happens. (I got the 771 code by printing the event.type whenever a key is being pressed).
You call
SDL_PollEvent()
only once, so it gives the event which occurred first which might not beSDL_KEYDOWN
.You must make a
main
loop to handle your events:This loop takes care of the events which you don't care about(for e.g.
MOUSEMOTION
).And you can also use
switch
withevent.type
if you are going to handle many different types of events.