SDL事件是诸如按键,鼠标移动,操纵按钮按下之类的东西。
在内部,SDL将所有等待处理的事件存储在事件队列中。首选方式是使用SDL_PollEvent()接收系统事件。它可以从主循环完成,并且在等待事件发布时不会挂起主循环。如果队列上没有事件,则返回0,否则返回1。
- 定义是否退出的标志isQuit初始值设置为0,表示不退出。
- 我们使用while循环依次处理每个事件,直到遇到SDL_QUIT事件,退出循环结束进程。
int isQuit = 0;
while (!isQuit) {
SDL_PollEvent(&test_event)
switch (test_event.type) {
case SDL_QUIT:
isQuit = 1;
printf("We got a quit event.\n");
break;
default:
//printf("Unhandled Event!\n");
break;
}
}
printf("Event queue empty.\n");
除了从SDL中取事件外,我们也可以自定义事件,放到时间处理队列中。
SDL_Event user_event;
user_event.type = SDL_USEREVENT;
user_event.user.code = 2;
user_event.user.data1 = NULL;
user_event.user.data2 = NULL;
SDL_PushEvent(&user_event);
SDL_Event是SDL中使用的所有事件结构的并集。 使用它很简单,只需知道哪种事件类型对应于哪个联合成员即可。 下表列出了这些关系
Event Type | Event Structure | SDL_Event Field |
---|---|---|
SDL_AUDIODEVICEADDED SDL_AUDIODEVICEREMOVED | SDL_AudioDeviceEvent | adevice |
SDL_CONTROLLERAXISMOTION | SDL_ControllerAxisEvent | caxis |
SDL_CONTROLLERBUTTONDOWN SDL_CONTROLLERBUTTONUP | SDL_ControllerButtonEvent | cbutton |
SDL_CONTROLLERDEVICEADDED SDL_CONTROLLERDEVICEREMOVED SDL_CONTROLLERDEVICEREMAPPED | SDL_ControllerDeviceEvent | cdevice |
SDL_DOLLARGESTURE SDL_DOLLARRECORD | SDL_DollarGestureEvent | dgesture |
SDL_DROPFILE SDL_DROPTEXT SDL_DROPBEGIN SDL_DROPCOMPLETE | SDL_DropEvent | drop |
SDL_FINGERMOTION SDL_FINGERDOWN SDL_FINGERUP | SDL_TouchFingerEvent | tfinger |
SDL_KEYDOWN SDL_KEYUP | SDL_KeyboardEvent | key |
SDL_JOYAXISMOTION | SDL_JoyAxisEvent | jaxis |
SDL_JOYBALLMOTION | SDL_JoyBallEvent | jball |
SDL_JOYHATMOTION | SDL_JoyHatEvent | jhat |
SDL_JOYBUTTONDOWN SDL_JOYBUTTONUP | SDL_JoyButtonEvent | jbutton |
SDL_JOYDEVICEADDED SDL_JOYDEVICEREMOVED | SDL_JoyDeviceEvent | jdevice |
SDL_MOUSEMOTION | SDL_MouseMotionEvent | motion |
SDL_MOUSEBUTTONDOWN SDL_MOUSEBUTTONUP | SDL_MouseButtonEvent | button |
SDL_MOUSEWHEEL | SDL_MouseWheelEvent | wheel |
SDL_MULTIGESTURE | SDL_MultiGestureEvent | mgesture |
SDL_QUIT | SDL_QuitEvent | quit |
SDL_SYSWMEVENT | SDL_SysWMEvent | syswm |
SDL_TEXTEDITING | SDL_TextEditingEvent | edit |
SDL_TEXTINPUT | SDL_TextInputEvent | text |
SDL_USEREVENT | SDL_UserEvent | user |
SDL_WINDOWEVENT | SDL_WindowEvent | window |
Other events | SDL_CommonEvent | none, use .type |