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


    系列文章目录

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

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



    创建空窗口

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

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

    #if defined(__cplusplus)
    extern "C" {
    #endif
    #include 
    #if defined(__cplusplus)
    };
    #endif
    
    int 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    上述代码中:

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

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

    
    #if defined(__cplusplus)
    extern "C" {
    #endif
    #include 
    #if defined(__cplusplus)
    };
    #endif
    
    int 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

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

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

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

    OK,现在去运行代码,你可以得到一个空窗体,它会一直存在直到你关闭它:
    在这里插入图片描述
    哈哈哈,非常简单吧。你可以以此为起点,开始在你的窗口画东西。玩得开心,再回来看更多的教程吧!

    总结

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

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

  • 相关阅读:
    学生选修课程管理系统c++
    修改element-ui源码给el-dialog添加全屏功能
    什么是PaaS平台?
    Linux01
    史上最全的Java进阶书籍推荐,你看了几本?
    PyTorch会在每次.backward()调用时会累积梯度的问题
    使用Pyarmor保护Python脚本不被反向工程
    Cracking the Safes之Linux系统下gdb调试
    SpringSecurity系列——认证(Authentication)架构day2-3(源于官网5.7.2版本)
    【C语言】【结构体的位段】位段的内存分配及注意事项
  • 原文地址:https://blog.csdn.net/weiwei9363/article/details/125878466