2012-02-13 2 views
2

나는 버전 2.0에 SDL 키보드 입력을 테스트하기 위해 다음과 같은 코드가 있습니다쓰레기 키보드 정보 2.0

Code: 0x460001 
Name: ¶ 
Hex: 0x14 
Uni: 

Code: 0x460001 
Name: → 
Hex: 0x1A 
Uni: 

Code: 0x460001 
Name: Backspace 
Hex: 0x08 
Uni: 

Code: 0x460001 
Name: § 
Hex: 0x15 
Uni: 

Code: 0x460001 
Name: ↨ 
Hex: 0x17 
Uni: 

Code: 0x460001 
Name: ∟ 
Hex: 0x1C 
Uni: 

:

while (SDL_PollEvent(&evnt)) 
     { 
      if (evnt.type == SDL_KEYDOWN) 
      { 
       board = evnt.key; 
       key = board.keysym.sym; 

       switch (key) 
       { 
        case SDLK_a: 
         printf("a key!\n"); 
         break; 

        case SDLK_d: 
         printf("d key!\n"); 
         break; 

        default: 
         printf("Code: 0x%X\n", board.keysym.scancode); 
         printf("Name: %s\n", SDL_GetKeyName(key)); 
         printf("Hex: 0x%02X\n", key); 
         printf("Uni: %c\n\n", (char)board.keysym.unicode); 
       } 
      } else if (evnt.type == SDL_QUIT) 
       running = false; 
     } 

그러나 다음 시퀀스 '쿼티'의 출력입니다 나는 바보 같은 짓을하고 있니?

또한 내 프로그램에 이상적인 방법은 아닙니다. 만약 내가
을하는 것을 선호 (ispressed [ 'K'])
{}
등 ...

는 SDL에서 입력 처리의이 양식을 할 수있는 능력이 아니면 내를 작성해야합니다 그것을 관리하는 자신의 클래스?

+0

원을 실행하고 키보드에서 머리를 길게 치켜 들었을 때 코드를 확인하고 sdl을 직접 작성했습니다. 내가 만든 버전이 예상대로 작동합니다. 그림을 이동. – AGuyInAPlace

+0

어쨌든 어디에서 바이너리를 가져 왔습니까? [주 SDL 페이지] (http://www.libsdl.org/hg.php)에 2.0 바이너리가 보이지 않습니다. – genpfault

+0

신사 숙녀 여러분은 자신의 웹 사이트에서 최신 빌드를 가지고 있다는 소식을 포럼에 게시했습니다. 나는 그 이름을 기억하지 않는다. – AGuyInAPlace

답변

0

switch 문은 기본적으로 if 문입니다. 당신이 정말로 원하는 방식으로 작업을 수행하려는 경우 당신이 정확하게 당신이 위의 말처럼 보이게하려는 경우

, 당신이 bools의 MAP, 전화를 정의해야합니다,

if (event.type == SDL_KEYDOWN) 
     { 
      board = evnt.key; 
      key = board.keysym.sym; 

      if(key==SDLK_a) 
      { 
       //do stuff here 
      } 

과 같을 것이다 isPressed , 키 이벤트가 발생할 때마다 키를 눌렀을 때 값을지도에 설정하는 도우미에게 전달합니다. 이제 말씀 드리죠. SDL이 당신이 이것을하기를 원하는 방식에 익숙해 져야합니다. 당신이 그것에 익숙해지면 더 이해할 수 있습니다.

발생하는 버그에 관해서는 - 나는 그 부분에 대해 너무 확신하지는 않지만 SDL_EnableUNICODE(); 귀하의 init. 그런 다음 동일한 입력을 테스트하여보고하십시오. 적어도 유니 코드 문제를 해결할 것으로 기대합니다.