系列文章目录

SDL2 简明教程(一):使用 Cmake 和 Conan 构建 SDL2 编程环境

SDL2 简明教程(二):创建一个空的窗口


文章目录

  • 系列文章目录
  • 创建空窗口
  • 总结

创建空窗口

在上一篇文章中,我们了解了通过 CMake + Conan 引入 SDL2 库进行编程。今天我们继续 SDL2 教学,学习如何创建一个空的窗口。

创建空窗口非常简单,只需仅仅几行代码:

#if defined(__cplusplus)
extern "C" {#endif
#include <SDL.h>
#if defined(__cplusplus)
};
#endifint main(int argc, char ** argv)
{SDL_Init(SDL_INIT_VIDEO);SDL_Window * screen = SDL_CreateWindow("My SDL Empty Window",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);SDL_Quit();return 0;
}

上述代码中:

  • SDL_Init 初始化 SDL,它告诉 SDL 哪些子系统是我们需要的,这个例子中 SDL_INIT_VIDEO 表示视频是我们需要的
  • 在代码末尾调用 SDL_Quit 退出 SDL,清理相关内存和资源
  • SDL_CreateWindow 用于创建一个窗口,我们将窗口的标题,初始化位置,窗口的宽和高以及 flags 告诉 SDL,它负责生成一个窗口

如果运行上述代码,它可以正常工作,但窗口停留的时间非常短暂,休~ 一下就不见了。我们可以添加一些代码,保持窗口直到它被主动关闭:


#if defined(__cplusplus)
extern "C" {#endif
#include <SDL.h>
#if defined(__cplusplus)
};
#endifint main(int argc, char *argv[]) {bool quit = false;SDL_Event event;SDL_Init(SDL_INIT_VIDEO);SDL_Window *screen = SDL_CreateWindow("My SDL Empty window",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,640, 480, 0);for (; !quit;) {SDL_WaitEvent(&event);switch (event.type) {case SDL_QUIT: {quit = true;break;}}}SDL_Quit();return 0;
}

for(;!quit;) 表明代码在无限循环直到满足退出条件。

我们使用 SDL_WaitEvent() 来等待一个事件发生(例如按下键盘),同时将一个 SDL_Event 结构体送入其中。你还可以使用 SDL_PollEvent() 来连续不间断地获取事件,但它会消耗大量的 CPU 周期。(SDL_WaitEvent() 基本上都在睡眠,知道发生了一个事件,总体上它更轻量)。

事件告诉你发生了啥,它可能是按键、滚轮滑动、鼠标移动、触摸交互等等。在我们的示例中,我们只对 SDL_QUIT 事件感兴趣,这意味着用户点击了窗体的关闭按钮。

OK,现在去运行代码,你可以得到一个空窗体,它会一直存在直到你关闭它:

哈哈哈,非常简单吧。你可以以此为起点,开始在你的窗口画东西。玩得开心,再回来看更多的教程吧!

总结

本文介绍了如何使用 SDL2 创建一个空的窗口,你可以指定窗口的位置,大小等信息。为了让窗口保持存在,我们引入一个无限循环直到满足退出条件,关闭窗口触发 SDL_QUIT 事件,通过 SDL_WaitEvent 等待该事件,随后关闭窗口。

本文源码你可以在 sdl2_tutorial 找到。

SDL2 简明教程(二):创建一个空的窗口相关推荐

  1. python创建一个空列表alist_【Python 1-7】Python手把手教程之——详解列表List

    列表 作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 列表,在其他语言中又被称为数组,是由一系列按特定顺序排列的元素组成.你可以创建包含字母表中所有字母.数字0~9或所有家庭成员姓名 ...

  2. Scott Mitchell 的ASP.NET 2.0数据教程之一: 创建一个数据访问层

    原文 | 下载本教程中的编码例子 | 下载本教程的英文PDF版 导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研 ...

  3. 【Android Developers Training】 93. 创建一个空验证器

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库

    [homebrew 系列文章] HomeBrew常规使用教程 Homebrew进阶使用教程(一) Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库 Homebrew进阶使用教程 ...

  5. python创建一个空集合_python空集合如何表示

    python中,用set来表示一个无序不重复元素的序列.set的主要作用就是用来给数据去重. 可以使用大括号 { } 或者 set() 函数创建集合,但是注意如果创建一个空集合必须用 set() 而不 ...

  6. python定义一个空数组_在NumPy中如何创建一个空的数组/矩阵?

    如何以我通常使用列表(List)的方式使用Numpy数组或矩阵? 我想创建一个空的数组(或矩阵),然后每次添加一列(或行)到这个数组(或矩阵). 目前能想到的方法是: mat = None for c ...

  7. python 空dataframe_python 创建一个空dataframe 然后添加行数据的实例

    实例如下所示: import pandas as pd import re import math dframe1 = pd.read_excel("window regulator分析报告 ...

  8. 扩展springmvc组件——当页面跳转时,需要在Controller里面创建一个空方法去跳转或者是创建一个配置类  ||日期格式化说明||自定义格式化器||消息转化器扩展fastjson

    在容器中注册视图控制器 当页面跳转时,我们需要在Controller里面创建一个空方法去跳转,那么有没有别的配置方法呢 创建一个WebMvcConfig的配置类   实现WebMvcConfigure ...

  9. python dataframe创建_python 创建一个空dataframe 然后添加行数据的实例

    实例如下所示: import pandas as pd import re import math dframe1 = pd.read_excel("window regulator分析报告 ...

最新文章

  1. c语言递归求五阶行列式源代码,久游堂怎么样 -官网
  2. mysql5.7.安装记录
  3. C++中的以任意字符分割字符串
  4. mysql中grade字段降序排列_mysql高级查询
  5. Linux命令:MySQL系列之十--MySQL用户和权限管理,mysql管理员密码重置
  6. python上机报告出现的问题和解决方法_关于发现存在问题及解决方法的报告
  7. 基于sklearn的朴素贝叶斯_朴素贝叶斯分类实战:对文档进行分类
  8. mysql show slave_Mysql复制 show slave status
  9. Protobuf序列化的原理-字符如何转化为编码
  10. 内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别
  11. 青蛙学Linux—Zabbix Agent的主动模式和被动模式
  12. Apache Maven 入门篇 ( 上 )
  13. dijkstra算法学习笔记
  14. lisp用entmake生产圆柱体_液态基酒生产
  15. TextCNN代码解读及实战
  16. [转]字号、pt、px、inch、cm 之间的关系及对照表
  17. 信度spss怎么做_Spss详细图文教程——问卷信度和效度检验步骤图解
  18. 艺歌点歌系统服务器连接不了,艺歌手机点歌系统歌曲是什么格式
  19. [02/Dec/2019:12:59:10 +0800]之日期转换
  20. 【python】基础七:编码问题

热门文章

  1. CUDA(33)之ETH Mining(Parallel-mining project based on Opencl/GPU )
  2. ICASSP2021丨多说话人多风格音色克隆大赛(M2VoC)
  3. 计算机算法的概念教案,算法概念的教学
  4. python编译程序输入上网时间并计算上网费用 计算方法_编一应用程序根据上网时间计算上网费用,计算方法如下: 25元基数 ≤10小时 每小时2元 10且≤50小时 每小...
  5. spring boot流浪动物救助系统 毕业设计-附源码180920
  6. 一级目录的解释(存储什么东西,英文)
  7. html基础标签独坐敬亭山练习,八年级下册《独坐敬亭山》课前预习
  8. 对研究生教育有什么看法_我对研究员特征的看法
  9. 违约概率和违约损失率
  10. 如何获取网页上的图片