[c++] SDL 이벤트 처리
SDL(Simple DirectMedia Layer)은 게임 및 멀티미디어 응용 프로그램을 개발하기 위한 크로스 플랫폼 개발 라이브러리입니다. SDL은 이벤트를 효과적으로 처리하여 사용자 입력, 창 관리 및 다른 시스템 이벤트를 처리할 수 있습니다.
이벤트 루프
SDL에서 이벤트 처리는 일반적으로 이벤트 루프를 통해 이루어집니다. 다음은 간단한 이벤트 루프의 예시입니다.
SDL_Event event;
bool isRunning = true;
while (isRunning) {
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
isRunning = false;
}
}
}
위의 코드에서 SDL_PollEvent
함수는 이벤트 큐에서 이벤트를 가져옵니다. SDL_QUIT
이벤트가 발생하면 isRunning
변수를 false로 설정하여 루프를 종료합니다.
이벤트 핸들링
특정 이벤트에 대한 처리는 각 이벤트 타입에 대한 핸들러 함수를 작성하여 수행됩니다. 예를 들어, 키보드 입력에 대한 처리를 다음과 같이 작성할 수 있습니다.
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_KEYDOWN) {
switch (event.key.keysym.sym) {
case SDLK_UP:
// 위쪽 화살표 키
break;
case SDLK_DOWN:
// 아래쪽 화살표 키
break;
// 다른 키에 대한 처리
}
}
}
키보드 입력에 대한 처리를 위한 핸들러 함수는 SDL_KEYDOWN
이벤트에 대한 스위치 문으로 구성되어 있습니다.
마우스 이벤트 처리
마우스 입력에 대한 처리 역시 유사한 방식으로 이루어집니다. 예를 들어, 마우스 클릭 이벤트에 대한 처리는 다음과 같습니다.
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_MOUSEBUTTONDOWN) {
if (event.button.button == SDL_BUTTON_LEFT) {
// 마우스 왼쪽 버튼 클릭
}
}
}
위의 코드는 SDL_MOUSEBUTTONDOWN
이벤트가 발생했을 때, 마우스 왼쪽 버튼 클릭에 대한 처리를 보여줍니다.
결론
SDL을 사용하여 이벤트 처리를 효과적으로 수행하기 위해서는 적절한 이벤트 루프 및 이벤트 핸들링이 필요합니다. 위의 예시 코드를 참고하여 원하는 이벤트에 대한 처리를 구현할 수 있습니다.
참고 문헌:
- https://lazyfoo.net/tutorials/SDL/
- https://www.libsdl.org/