함수를 호출하면 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;
}
아마도 SDL_Init, SDL_INIT_EVENTS에서 이벤트를 초기화해야합니다. – dohashi
@dohashi 이벤트 메커니즘은 SDL_INIT_VIDEO로 초기화됩니다. SDL_PollEvent 함수는 예상대로 작동합니다. 그런데 SDL_INIT_EVENTS를 정의하지 않는 SDL 1.2를 사용합니다. –
SDL_ALLEVENTS를 사용해 보셨습니까? – 2501