在我的项目中,我无法获得一个简单的switch语句来处理SDL输入。这是一个例子:
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;
}
}
当我运行它时,首先它似乎没有被识别出SDL_KEYDOWN。我的案子也不是。所以我把代码切换到:
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;
}
}
这会导致默认情况在我按住或按任意键时运行,因此我的对象根据m_y + = 1移动。如果我删除默认情况并尝试按w,a,s或d,则不会发生任何事情。如果我保持m_y + = 1,但使用SDL_KEYDOWN而不是771,则没有任何反应。 (每当按下一个键时,我通过打印event.type获得了771代码)。
答案 0 :(得分:2)
您只需拨打SDL_PollEvent()
一次,因此它会先发生可能不是SDL_KEYDOWN
的事件。
您必须制作一个main
循环来处理您的活动:
SDL_Event event;
bool quit=false;
while(!quit)
{
while(SDL_PollEvent(&event)
{
if(event.type==SDL_KEYDOWN)
{
....
}
else if(event.type==SDL_QUIT)
{
quit=true;
}
}
}
此循环处理您不关心的事件(例如MOUSEMOTION
)。
如果您要处理许多不同类型的活动,也可以将switch
与event.type
一起使用。