SDL2 简明教程(二):创建一个空的窗口
系列文章目录
创建空窗口
创建空窗口非常简单,只需仅仅几行代码:
#if defined(__cplusplus) extern "C" { #endif #include <SDL.h> #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; }
上述代码中:
-
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) }; #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; }
for(;!quit;) 表明代码在无限循环直到满足退出条件。
我们使用 SDL_WaitEvent() 来等待一个事件发生(例如按下键盘),同时将一个 SDL_Event 结构体送入其中。你还可以使用 SDL_PollEvent() 来连续不间断地获取事件,但它会消耗大量的 CPU 周期。(SDL_WaitEvent() 基本上都在睡眠,知道发生了一个事件,总体上它更轻量)。
事件告诉你发生了啥,它可能是按键、滚轮滑动、鼠标移动、触摸交互等等。在我们的示例中,我们只对 SDL_QUIT 事件感兴趣,这意味着用户点击了窗体的关闭按钮。
OK,现在去运行代码,你可以得到一个空窗体,它会一直存在直到你关闭它: 哈哈哈,非常简单吧。你可以以此为起点,开始在你的窗口画东西。玩得开心,再回来看更多的教程吧!
总结
本文介绍了如何使用 SDL2 创建一个空的窗口,你可以指定窗口的位置,大小等信息。为了让窗口保持存在,我们引入一个无限循环直到满足退出条件,关闭窗口触发 SDL_QUIT 事件,通过 SDL_WaitEvent 等待该事件,随后关闭窗口。
本文源码你可以在 找到。