2014-10-09 7 views
0

함수를 호출하면 PeekEvents 아래의 프로그램은 표준 출력에 0을 인쇄하고 SDL 창이 포커스를 가지고있을 때 키보드를 입력하더라도 끝내지 않습니다. 왜이 기능이 제 키 스트로크를 잡지 못합니까?SDL_PeepEvents를 올바르게 사용하려면 어떻게해야합니까?

#include <SDL/SDL.h> 
#include <stdio.h> 

#define LEN(a) ((int) (sizeof (a)/sizeof (a)[0]))  

static void PeekEvents(void) 
{ 
    SDL_Event events[1]; 
    int count; 

    do { 
     count = SDL_PeepEvents(events, LEN(events), SDL_PEEKEVENT, SDL_EVENTMASK(SDL_KEYDOWN)); 
     printf("%d\n", count); 
    } while (count == 0); 
} 


static void Init(int *error) 
{ 
    SDL_Surface *display; 

    *error = SDL_Init(SDL_INIT_VIDEO); 
    if (! *error) { 
     display = SDL_SetVideoMode(640, 480, 8, 0); 
     if (display != NULL) { 
      *error = 0; 
     } else { 
      fprintf(stderr, "SDL_SetVideoMode: %s\n", SDL_GetError()); 
      *error = 1; 
     } 
    } else { 
     fprintf(stderr, "SDL_Init: %s\n", SDL_GetError()); 
     *error = 1; 
    } 
} 


int main(void) 
{ 
    int error; 

    Init(&error); 
    if (! error) { 
     PeekEvents(); 
    } 
    return error; 
} 
+0

아마도 SDL_Init, SDL_INIT_EVENTS에서 이벤트를 초기화해야합니다. – dohashi

+0

@dohashi 이벤트 메커니즘은 SDL_INIT_VIDEO로 초기화됩니다. SDL_PollEvent 함수는 예상대로 작동합니다. 그런데 SDL_INIT_EVENTS를 정의하지 않는 SDL 1.2를 사용합니다. –

+0

SDL_ALLEVENTS를 사용해 보셨습니까? – 2501

답변

1

문서가 SDL_INIT_VIDEO를 사용하는 경우 SDL_INIT_EVENTS가 암시 적 어딘가에 상태 :

void PeekEvents(void) 
{ 
    SDL_Event events[1]; 
    int count; 

    do { 
     count = SDL_PeepEvents(events, LEN(events), SDL_PEEKEVENT, SDL_EVENTMASK(SDL_KEYDOWN)); 
     printf("%d\n", count); 
    } while (count == 0); 
} 

여기에 전체 프로그램입니다.

루프에 SDL_PumpEvents에 대한 호출을 추가해야합니다. 그렇지 않으면 대기열에 메시지가 도착하지 않습니다.

SDL_PumpEvents는 보류중인 모든 입력 정보를 장치에서 수집하여 이벤트 대기열에 배치합니다. SDL_PumpEvents에 대한 호출이 없으면 대기열에 이벤트가 배치되지 않습니다. SDL_PollEvent 및 SDL_WaitEvent는 암시 적으로 SDL_PumpEvents를 호출하기 때문에 종종 SDL_PumpEvents에 대한 호출이 필요하지 않습니다. 그러나 폴링 중이거나 이벤트를 기다리는 중 (예 : 필터링 중) 이벤트 대기열을 강제로 업데이트하려면 SDL_PumpEvents를 호출해야합니다.

+0

Gunther 대단히 감사합니다. SDL_PeepEvents 호출 바로 전에 'SDL_PumpEvents();'를 추가하면 트릭을 수행했습니다. –

관련 문제