SDL入门教程3(事件驱动编程)

本文介绍了如何在SDL中创建窗口并使用事件驱动循环来处理用户输入,避免使用`SDL_Delay`导致的资源占用问题。重点讲解了SDL事件类型,如键盘、鼠标事件,并提供了一个示例,展示如何根据鼠标和键盘事件改变窗口内容。
摘要由CSDN通过智能技术生成

本文是我的笔记,如有兴趣,请参见视频SDL教程(第3讲)

怎样使窗口停留更长时间,且允许使用者进行多种操作。

1.SDL_Delay()运行时,系统处于繁忙状态,不便对窗口操作。
2.死循环占用资源很大,CPU运行压力大,同样难以对窗口操作。

while(1)
{
   
}

3.利用事件驱动循环,既能使窗口停留,又能对事件进行处理。

while(1){
   
        while(SDL_PollEvent(&event)){
   
          }
        }   

对事件的介绍

1.SDL事件包括 键盘事件,鼠标事件,游戏杆事件,系统事件(包括离开事件,自定义事件等等),任何一个窗口程序使用一个事件队列保存这些事件。
2.SDL_Event 是共用体类型,SDL利用它存储事件信息。
常用

 SDL_Event event //定义一个事件。
 	event.type//什么类型的事件
 	event.button//鼠标事件
 	event.key//键盘事件
 	{
   其中  event里有SDL_KeyboardEvent key;//结构体类型,定义一个结构体,名为key。
 	key里有SDL_KeySym keysym//结构体类型,定义一个结构体,名为keysym.(此结构体包含按键信息)
 	keysym里有 SDLKey sym //表示按键的虚拟码(不用记忆数字,SDL有其预定义宏名)
 	}
 	event.quit//退出事件。
 	

常用预定义宏名

SDL_QUIT //退出事件
SDL_MOUSEBUTTONDOWN//鼠标事件
SDL_BUTTON_LEFT//鼠标左键
SDL_BUTTON_RIGHT//鼠标右键
SDL_KEYDOWN//键盘事件
{
   其中虚拟码的预定义宏名  SDLK_0 , SDLK_1 ~ SDLK_9 //表示0~9
SDLK_F1 ~SDLK_F12
SDLK_a  //诸如此类,表示字母键
SDLK_MINUS //表示'-'
SDLK_EQUALS//表示'+'
}

SDL_PollEvent(SDL_Event* event) 函数表示轮询所有事件(与event 以及循环配合使用。)从事件队列中取出事件,判断类型,然后处理。
为了安全退出,不用exit(0), 设计跳出循环

bool quit = false; //C语言要使用布尔类型需要先包含头文件 #include<stdbool.h>
    while(quit == false){
   
        while(SDL_PollEvent(&event)){
   
            if(event.type == SDL_QUIT){
   
                quit = true;
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值