SDL事件处理(一些数据类型)

SDL1.2中的定义:

typedef enum {
       SDL_NOEVENT = 0,			/**< Unused (do not remove) */
       SDL_ACTIVEEVENT,			/**< Application loses/gains visibility */
       SDL_KEYDOWN,			/**< Keys pressed */
       SDL_KEYUP,			/**< Keys released */
       SDL_MOUSEMOTION,			/**< Mouse moved */
       SDL_MOUSEBUTTONDOWN,		/**< Mouse button pressed */
       SDL_MOUSEBUTTONUP,		/**< Mouse button released */
       SDL_JOYAXISMOTION,		/**< Joystick axis motion */
       SDL_JOYBALLMOTION,		/**< Joystick trackball motion */
       SDL_JOYHATMOTION,		/**< Joystick hat position change */
       SDL_JOYBUTTONDOWN,		/**< Joystick button pressed */
       SDL_JOYBUTTONUP,			/**< Joystick button released */
       SDL_QUIT,			/**< User-requested quit */
       SDL_SYSWMEVENT,			/**< System specific event */
       SDL_EVENT_RESERVEDA,		/**< Reserved for future use.. */
       SDL_EVENT_RESERVEDB,		/**< Reserved for future use.. */
       SDL_VIDEORESIZE,			/**< User resized video mode */
       SDL_VIDEOEXPOSE,			/**< Screen needs to be redrawn */
       SDL_EVENT_RESERVED2,		/**< Reserved for future use.. */
       SDL_EVENT_RESERVED3,		/**< Reserved for future use.. */
       SDL_EVENT_RESERVED4,		/**< Reserved for future use.. */
       SDL_EVENT_RESERVED5,		/**< Reserved for future use.. */
       SDL_EVENT_RESERVED6,		/**< Reserved for future use.. */
       SDL_EVENT_RESERVED7,		/**< Reserved for future use.. */
       /** Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
       SDL_USEREVENT = 24,
       /** This last event is only for bounding internal arrays
	*  It is the number of bits in the event mask datatype -- Uint32
        */
       SDL_NUMEVENTS = 32
} SDL_EventType;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言回调函数在事件处理中的运用例程,该例程使用了SDL库来实现图形界面和事件处理。 ```c #include <stdio.h> #include <SDL2/SDL.h> typedef void (*event_callback_t)(void *data); typedef struct { event_callback_t callback; void *data; } event_handler_t; void button_clicked(void *data) { printf("Button clicked\n"); } void handle_event(SDL_Event event, event_handler_t *handler) { switch (event.type) { case SDL_QUIT: printf("Quit event\n"); break; case SDL_MOUSEBUTTONDOWN: if (handler != NULL && handler->callback != NULL) { handler->callback(handler->data); } break; } } int main() { SDL_Init(SDL_INIT_VIDEO); SDL_Window *window = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN); SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); event_handler_t handler = { .callback = button_clicked, .data = NULL }; while (1) { SDL_Event event; while (SDL_PollEvent(&event)) { handle_event(event, &handler); } SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); SDL_Rect rect = { 100, 100, 100, 50 }; SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_RenderFillRect(renderer, &rect); SDL_RenderPresent(renderer); } SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` 在上面的代码中,我们定义了一个event_handler_t结构体,该结构体包含了一个回调函数指针和一个void指针类型的数据。然后我们定义了一个button_clicked回调函数,在该函数中输出"Button clicked"。在handle_event函数中,我们根据不同的事件类型来处理事件,如果是鼠标点击事件,则调用回调函数处理该事件。 在主函数中,我们创建了一个SDL窗口和渲染器,并定义了一个event_handler_t类型的handler变量,该变量包含了button_clicked回调函数和空指针。然后我们进入了一个事件循环,不断地处理用户输入事件和绘制界面。在界面上,我们绘制了一个矩形,当用户点击该矩形时,程序会调用handler变量中的回调函数来处理该事件。 通过使用回调函数,我们可以将事件处理的逻辑和程序的其他部分分离开来,使代码更加清晰和易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值