2009-11-15 3 views
0

SDL 이벤트 큐의 이벤트를 처리해야하는 일반 함수가 있습니다. 지금까지,이 함수는 다음과 같습니다SDL_Event.type은 폴링 후 항상 비어 있습니다.

int eventhandler(void* args){ 
    cout << "Eventhandler started.\n"; 
    while (!quit){ 
    while (SDL_PollEvent(&event)){ 
     cout << "Got event to handle: " << event.type << "\n"; 
     switch (event.type){ 
     SDL_KEYDOWN: 
      keyDownHandler(event.key.keysym.sym); 
      break; 
     default: 
      break; 
     } 
    } 
    } 
} 

을 그러나, 나는이 기능을 테스트 할 때, 나는 사건의 전체 무리를 얻을 수 있지만, 아무도 그들의는 유형을 갖고있는 것 같다 않습니다. 0이나 아무것도 인쇄하지 않습니다. 아무 것도 없습니다. 아무 키나 누르면 다음과 같이 출력됩니다.

Got event to handle: 

그 밖의 것은 없습니다. 모든 자습서와 SDL 문서에서는 이와 같은 이벤트를 처리해야한다고 말하지만 작동하지 않습니다. 다른 사람이이 문제 또는 해결책을 가지고 있습니까?

그런데 eventhandler는 SDL_Thread에서 실행되지만, 나는 그것이 문제라고 생각하지 않습니다.

+2

'SDL_KEYDOWN :'은 (는)'case SDL_KEYDOWN :'이어야합니다. –

+0

@ gf : 네가 맞아, 고마워. 이상하게도 그걸 해결했습니다. event.type은 여전히 ​​비어 있지만 * 어떻게 든 * 작동합니다. 감사. –

+0

저는 MS Visual C++을 통해 컴파일하지는 않지만 "이벤트"사용에 대해서는주의해야한다는 것을 알고 있습니다. VC++의 키워드입니다. 호환성을 위해 "e"또는 그 외의 다른 언어로 변경하려고합니다. 언젠가 VC++을 사용하기를 원할 수도 있고, 다른 누군가가 그것을 통해 작품을보고 싶어 할 수도 있습니다. 그것은 결국 매우 일반적으로 사용되는 컴파일러입니다. – Zoomulator

답변

1

SDL_KEYDOWN 앞에 누락 된 case의 결과가 발생하지 않습니다.
case이 누락되면 컴파일러에서 예를 들어 사용할 점프 레이블을 봅니다. goto SDL_KEYDOWN;이 표시되어 default 레이블이 switch 문에서 유일한 레이블이됩니다.

일부 스트림 플래그를 어딘가에 설정하지 않으면 event.type이 출력되지 않는 이유가 표시되지 않습니다.
event.typeUint8입니다. SDL은 정수 유형에서 typedef하므로 1과 같이 처리해야합니다. 정수형과 마찬가지로 은 "비어 있습니다" 일 수 있지만 출력은 다음과 같을 수 있습니다.

관련 문제