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 |
博客介绍了SDL事件,如按键、鼠标移动等。SDL将待处理事件存于事件队列,可通过SDL_PollEvent()接收系统事件,该方法不挂起主循环。还可定义退出标志,用while循环处理事件,直至遇到SDL_QUIT事件。此外,也能自定义事件,同时介绍了SDL_Event的使用。
2291

被折叠的 条评论
为什么被折叠?



