本文会带领您感受sdl的魅力,还请您和我一起加油一起成长

目录

文章目录

前言

一、如何去创建一个窗口

1.1 首先使用sdl必须用的带参数版本的main函数

1.2 先初始化一下sdl库

1.3 接下来我们创建一个窗口

1.4获取窗口的表面

1.5给窗口去设置一个颜色

1.6 更新一下窗口的表面

二、图片的使用

2.1 加载图片

2.2 输出图片

三、图片和窗口和表面的销毁

3.1 图片的释放

3.2 窗口的释放

3.3 表面的释放

四、事件的处理

五、渲染器

5.1渲染器的创建

5.2 渲染器来绘制图形

5.3设置渲染器的绘制颜色

5.4 设置渲染器背景颜色

5.5 渲染器加载图片

5.6 输出图片

5.7 更新渲染器

5.8 纹理的释放的渲染器的释放

总结



前言

本文主要讲如何用sdl去加载一个窗口和输出一些图片以及如何简单的去事件处理,以及渲染器的操作


一、如何去创建一个窗口

1.1 首先使用sdl必须用的带参数版本的main函数

int main(int argc,char*argv[])
{return 0;
}

1.2 先初始化一下sdl库

看自己需要做的操作来选择初始化什么,比如我们接下来只会用到窗口和事件处理,那么我们只需要用SDL_INIT_VIDEO来初始化,也可以初始化所有用SDL_INIT_EVERYTHING

//SDL_Init(SDL_INIT_VIDEO)
//如果初始化成功,那么应该返回0,所以我们做个判断比较好
if(SDL_Init(SDL_INIT_VIDEO)!=0)
{SDL_log("初始化sdl失败");
}

1.3 接下来我们创建一个窗口

SDL_Window*window=SDL_CreateWindow(u8"这个是窗口的名字",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED, 800, 500, SDL_WINDOW_SHOWN);

这里面用到一个类是SDL_Window这个就是一个窗口的类

用到了创建窗口的函数SDL_CreateWindow(),里面一共需要六个参数

第一个是窗口的名字,使用中文当窗口名字的话就必须在字符串前面加上u8

第二个第三个是窗口的位置,我推荐使用两个SDL_WINDOWPOS_UNDEFINED,这表示窗口的位置编译器会自动给你调整

第四个第五个参数是窗口的大小,第一个是x,第二个是y

最后一个参数是决定你是否会不会有控制台出现,不想出现可以填0,想出现的话 SDL_WINDOW_SHOWN就可以。

1.4获取窗口的表面

其实我们操作窗口就是需要操作窗口的表面

//获取窗口的表面SDL_Surface* winSfc = SDL_GetWindowSurface(window);

SDL_Surface这个类型就是窗口的表面类型

SDL_GetWindowSurface这个函数只有一个参数,就是你所需要获取的哪个窗口的表面

1.5给窗口去设置一个颜色

//使用白色填充窗口
SDL_FillRect(winSfc, NULL, SDL_MapRGB(winSfc->format, 255, 255, 255));

这里用到了SDL_FillRect这个函数,一共三个参数

第一个参数是窗口的表面

第二个参数是一个矩形,SDL_Rect 类,参数是四个参数,如果想设置在窗口的所有位置那么用NULL

第三个参数就是设置颜色,用RGB的二进制,或者使用SDL_MapRGB这个参数,其中,第一个参数是表面这个类的成员format,其他三个参数就是RGB

1.6 更新一下窗口的表面

因为其实表面是一个缓冲区 ,在表面执行的操作需要更新到窗口上

//更新一下窗口表面SDL_UpdateWindowSurface(window);

SDL_UpdateWindowSurface这个参数就是你需要更新到哪个窗口上

二、图片的使用

2.1 加载图片

如果想使用图片,那首先的就是加载出来

//加载图片SDL_Surface* mm2= SDL_LoadBMP("./assets/mm2.bmp");

SDL_LoadBMP就是加载图片的函数,sdl的标准库只能加载BMP的图片,参数就是图片路径

2.2 输出图片

//输出图片SDL_BlitSurface(mm2, NULL, winSfc, NULL);

SDL_BlitSurface有四个参数来输出图片

第一个参数就是你要输出的图片,第三个参数就是你要输出要哪个表面

第二个参数是你要输出的图片位置,如果想从窗口的0,0处,就用NULL即可

第四个参数是你要输出的图片某个位置,如果不想设置,就用NULL即可

三、图片和窗口和表面的销毁

凡是使用了动态内存的指针,不用了就需要给他手动释放掉

3.1 图片的释放

SDL_FreeSurface(mm2);

3.2 窗口的释放

SDL_DestroyWindow(window);

3.3 表面的释放

 SDL_FreeSurface(winSfc);

四、事件的处理

我们会需要鼠标和键盘处理事情,这时我们就需要分发事件来处理

 // 应用程序主循环bool isDone = false;while (!isDone) {//事件循环SDL_Event ev = { 0 };while (SDL_PollEvent(&ev)) {//分发事件//退出事件if (ev.type == SDL_QUIT) {//用户点击了窗口右上角的关闭按钮isDone = true;}//键盘事件else if (ev.type == SDL_KEYDOWN) {switch (ev.key.keysym.sym){case SDLK_UP:break;case SDLK_LEFT:break;case SDLK_RIGHT:break;case SDLK_DOWN:break;default:break;}//这里我们来实现需要不断进行循环的操作
}

我们需要一个SDL_Event类来不断获取信息,再去细分鼠标和键盘的各个操作

具体的我就不一 一介绍了

五、渲染器

渲染器其实是一个双缓冲区,支持硬件加速,也就是更快

5.1渲染器的创建

跟SDL_Surface很像,SDL_CreateRenderer这个函数来创建渲染器,返回类型只不过是一个SDL_Renderer而已,需要三个参数,而我们只需要管第一个参数也就是窗口就行,第二个参数和第三个参数用-1和0就行,是编译器自己决定使用什么加速

//创建窗口渲染器SDL_Renderer*render=   SDL_CreateRenderer(window, -1, 0);//后面参数是编译器自己选驱动

 5.2 渲染器来绘制图形

绘制图形只能通过渲染器来绘制

SDL_RenderDrawLine(render, 0, 0, 333, 444);//x,y两点的坐标

5.3设置渲染器的绘制颜色

//设置渲染器绘制颜色SDL_SetRenderDrawColor(render,240,44,55,255);//最后一个是透明度一般255

5.4 设置渲染器背景颜色

//设置背景颜色SDL_SetRenderDrawColor(render, 255, 255, 255, 255);

设置颜色后得清屏,这样才能显示背景颜色

//清屏SDL_RenderClear(render);

5.5 渲染器加载图片

先把Surface转成Texture

 //把Surface转成textureSDL_Texture*mmTexture= SDL_CreateTextureFromSurface(render, mm2);

返回值是一个SDL_Texture类,然后就不用原来的这个Surface,记得释放

SDL_Texture又叫做纹理,实质是一个图片,但是允许硬件加速而已

5.6 输出图片

//绘制图片//矩形起点的x坐标和y坐标,矩形的高度和矩形的宽度SDL_Rect srcRect = { 399,444,444,444 };//指定输出的部分SDL_Rect dstRect = { 30,0,454,455 };//一二指定输出图片在窗口的位置,三四指定图片在窗口大小SDL_RenderCopy(render,mmTexture,&srcRect,&dstRect);//自动拉伸图片大小填充渲染器

5.7 更新渲染器

表面和渲染器很像,都是缓冲区,所以都需要更新

SDL_RenderPresent(render);

只不过渲染器的参数是自己而已

5.8 纹理的释放的渲染器的释放

SDL_DestroyTexture(mmTexture);SDL_DestroyWindow(window);

总结

这些就是sdl的一些基本操作

大体思路就是,先创建sdl库,然后加载窗口。获取表面或者渲染器,操作表面或者渲染器,然后实时更新,用键盘和鼠标的操作,用一个循环来获取SDL_Event,并分配各个操作

如果这篇文章对您有帮助,还请收藏,您的关注就是我最大的动力呀

SDL的教学(如何用sdl图形化以及sdl的使用思路)相关推荐

  1. Webduino STEAM 教育离线版本:Web:bit 筒体版本发布,配合BPI:bit教学硬件学习STEAM图形化编程

    Webduino WEB:Bit 简 体中文教育版平台发布,支持离线安装使用,这是BPI:bit for webduino平台为了STEAM教育专门发布的离线版本. 软件下载地址及安装: 简体中文版本 ...

  2. Webduino STEAM 教育离线版本:Web:bit 筒体版本发布,配合BPI:bit教学硬件学习STEAM图形化编程...

    2019独角兽企业重金招聘Python工程师标准>>> Webduino WEB:Bit 简 体中文教育版平台发布,支持离线安装使用,这是BPI:bit for webduino平台 ...

  3. 图形化界面扫雷(C语言+easyx实现,多图教学)

    扫雷 前言 准备工作 EasyX的下载 一些准备知识 头文件的引用 图形化界面的创建 图形化界面简介 图片加载与放置图片 鼠标操作 提示框 其它的准备知识 思路分析 代码实现 准备工作 初始化游戏的函 ...

  4. 如何用C的easyX图形库制作图形化界面菜单(财务管理系统)

    这是财务管理系统的一个图形化界面主菜单 : 下面这个是查询功能的一个子菜单: 一: 菜单的实现靠的是easyX,它是针对C++的一个图形库,编译器用的是Visual C.其实VC和easyX图形库就很 ...

  5. 中国电子学会青少年编程能力等级测试图形化四级模拟题

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 我们将有关编程题目的教学视频已经发布到抖 ...

  6. Caffe学习系列(21):caffe图形化操作工具digits的安装与运行

    经过前面一系列的学习,我们基本上学会了如何在linux下运行caffe程序,也学会了如何用python接口进行数据及参数的可视化. 如果还没有学会的,请自行细细阅读: caffe学习系列:http:/ ...

  7. .NET 图形化开源爬虫Hawk 3发布

    超级图形化爬虫Hawk已经发布两年半时间了,2015年升级到第二版,收到上千条用户反馈(tucao),100多个红包,总共666块五毛~一直想攒着这笔钱,去北境之王天通苑的龙德商场买最心爱的阿迪王! ...

  8. 思维导图_教学工具思维导图

    19世纪60年代英国著名心理学家.教育专家托尼·巴赞发明了一种革命性的思维工具-思维导图.它将我们的想法用图表示,可激发大脑潜能,充分释放大脑的无穷魔力,教学将不再是一件难事. 01 思维导图的概念 ...

  9. 构造Linux的图形化安装程序(4)(转)

    构造Linux的图形化安装程序(4)(转) rpm包管理和安装盘定制 本文是构造Linux的图形化安装程序系列文章的第四部分,内容主要包括RPM基本命令介绍,RPM包的定制过程,RPM SPEC文件的 ...

最新文章

  1. 使用ARouter实现组件化
  2. 引用 vsftpd配置手册(实用)
  3. 6. Qt 信号与信号槽 (6)- QObject::connect
  4. Android自动化测试Uiautomator--UiSelector接口简介
  5. 2020-09-26
  6. 自己收藏的symantec 需要的拿走
  7. android:图片裁剪
  8. 浅析C++开发工程师的高薪就业方向
  9. 基于Web的svg编辑器(2)——层次结构设计(DOM结构)
  10. win10连接共享打印机出现报错0x0000007c问题
  11. ipa文件缓存服务器,ipa文件包获取服务器地址
  12. iOS 清理缓存简介
  13. 华硕主板刷机后不能进入Windows的解决办法
  14. android 7 语音助手,语音助手横评:iPhone 大战 Android 旗舰,谁更好用?
  15. HJ 82 将真分数分解为埃及分数
  16. 新增诊所19804家 | 私营诊所要如何主动?才能被患者选择
  17. 物联网新零售项目 订单支付与出货控制
  18. 华为p10 android几,华为P10测评:市场上真心没有比华为更强劲的安卓机了
  19. 简单一步,轻松下载B站视频 | 实用技能get
  20. 读研攻略(10)—三千字总结,要不要读博?

热门文章

  1. 数仓 即席查询 之 Persto
  2. 常见的邮箱的pop和imap以及smtp地址整理
  3. AI测试与传统测试不同,需要考虑十个要点--新梦想软件测试
  4. 【树】二叉树的两种非递归遍历方法
  5. 3GPP TS 23501-g51 中英文对照 | 4.4.2 SMS over NAS
  6. java 图片相似搜索_JAVA比较两张图片相似度的方法
  7. 51单片机制作脉冲发生器
  8. 牛顿迭代法 简单入门
  9. 计算机教研实训报告,2020计算机实训心得体会范文
  10. 远程配置深度学习服务器详细教程,配置Conda+PyTorch环境