2014-11-18 5 views
4

내 SDL 프로그램이 모든 키에 대해 동일한 메모리 주소를 반환합니다. 키의 이름을 인쇄하려고합니다. 즉, 사용자가 'F'키를 누르면 콘솔 출력 ' 에프'. 이 코드를 편집하려면 어떻게해야합니까?SDL에서 키 이름 인쇄

void Game::handleEvents() 
    { 
     SDL_Event event; 
     if(SDL_PollEvent(&event)) 
     { 
      switch (event.type) { 
       case SDL_QUIT: 
        g_bRunning = false; 
        //SDL_Quit(); 
        break; 
       case SDL_KEYDOWN: 
        //this is the line that is not working as expected. 
        std::cout << &event.key.keysym.sym << std::endl; 
       default: 
        break; 
      } 
     } 
    } 

답변

2

& (std::cout << &event.key.keysym.sym << std::endl;)은 불필요합니다. 이것이 실제 데이터 대신 주소 인쇄의 원인입니다.

&이 제거 된 경우에도 값이 정수 열거 형이며 ASCII 코드 값이 아니기 때문에 f 키를 입력하면 'f'가 출력되지 않습니다.

1

F에 대한 키 코드는 SDLK_f

입니다 간단한 성명을해야 할 경우 : 변화가 있다면 당신은 그것을위한 추가 검사가 필요하므로

case SDL_KEYDOWN: 
    if(event.key.keysym.sym == SDLK_f) 
     std::cout << "f was pressed" << std::endl; 
    break ; //this was missing 

SDL 사례를 구분하지 않습니다

+1

근무, 감사합니다. 나는 6 분 동안 당신의 대답을 받아 들일 수 없다! : '( – WilsonKoder111

3

SDL_GetKeyName()을 사용하면 눌려진 키를 나타내는 인쇄 가능한 문자열을 가져올 수 있습니다. SDL_Keycode (SDL1.2의 SDLKey)는 열거 형으로 구현되었으므로 특히 "shift"및 "alt"와 같은 키의 경우 인쇄 할 수있는 문자로 간단하게 변환 할 수 없습니다.

이 시도 :

std::cout << SDL_GetKeyName(event.key.keysym.sym) << std::endl;