2014-10-30 4 views
0

내 프로젝트에서 간단한 switch 문을 사용하여 SDL 입력을 처리하는 데 문제가 있습니다. 다음은 그 예입니다.SDL_KEYDOWN 및 키 인식이 제대로 작동하지 않습니다.

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이 인식되지 않는 것 같습니다. 내 경우도 마찬가지다. 나는 기본 케이스를 제거하고 w를 눌러하려고하면 나의 객체 이동 m_y + = 1에 따르면,

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; 
    } 
} 

이 어떤 키를 내가 보유 할 때 실행하거나 눌러 기본 경우가 발생합니다 그래서에 코드를 전환 , a, s 또는 d의 경우 아무 것도 발생하지 않습니다. 내가 계속 m_y + = 1,하지만 771 대신 SDL_KEYDOWN을 사용하면 아무 일도 일어나지 않습니다. (키를 누를 때마다 event.type을 인쇄하여 771 코드를 얻었습니다.)

+0

# 반드시 SDL.h를 포함 하시겠습니까? – Exceptyon

답변

2

SDL_KEYDOWN이 아닌 처음 발생한 이벤트를 알려주기 위해 SDL_PollEvent()을 한 번만 호출합니다.
당신은 당신의 이벤트를 처리하는 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 예에 대한) 걱정하지 않는다 사건을 담당한다.

많은 종류의 이벤트를 처리하려는 경우 switchevent.type과 함께 사용할 수도 있습니다.

관련 문제