2024-3-20-SDL2开发一
三月 20, 2024
SDL2步骤
- 要做的第一件事,先初始化,调用 SDL_Init()方法
- 如果不初始化的话,一些方法在后续是无法起作用的。
- 例如 未初始化
SDL_AUDIO
就无法使用SDL_AUDIO.h
内包含的方法
1 | //我的初始化例子 |
这段初始化代码使用了SDL_INIT_EVERYTHING
常量,意思是初始化全部的系统。
如果没有成功初始化会打印出错误来。
- 要做的第二件事 创建屏幕 使用
SDL_CreateWindow()
方法即可
但是在此之前我们需要定义几个变量
1 | //The window we'll be rendering to |
以上定义了一个窗口指针和一个曲面指针,这在我们后续会用到的。
然后定义两个常量
1 | const int SCREEN_WIDTH = 1920; |
也就是我们窗口的长和宽了。
然后如何使用SDL_Createwindow()
呢
1 | extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, |
我们可以看到它默认接受6个参数
- 第1个是标题,字符串类型的
- 第2,3个是坐标,这个坐标是相对于屏幕的坐标,就是一屏幕左上角为0,0开始
- 第4,5,个很显然是width和height的缩写
- 第6个,flag标志位,则是填写一些SDL定义好的常量了
示例
1 | gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_FULLSCREEN ); |
示例中的代码我们使用了一个特殊的常量: SDL_WINDOWPOS_UNDEFINED
- 表示将窗口的位置设置为不确定,这意味着窗口将被放置在一个由操作系统确定的默认位置。这通常用于在创建窗口时指定窗口的初始位置。
- 要做的第三件事:构建事件循环
如果不去构建事件循环,我们将无法直接和我们的程序交互。所以我们需要构建一个用来监听事件的事件循环。
示例:
1 | bool quit = false; |
这段代码里我们首先声明了和bool
类型的变量quit
和SDL_Event
类型的变量e
.
quit 用来判断是否退出,如果退出则终止循环。
写成!quit
也是为了便于理解,相当于如果quit
为true
的时候,则主循环终止。
重要的事情有三点:
SDL_PollEvent()
是 SDL 库中用于轮询事件队列的函数。当调用
SDL_PollEvent()
函数时,它会检查当前事件队列中是否有任何待处理的事件。如果有事件在队列中,它将从队列中取出一个事件,并将其存储在传入的SDL_Event
结构体中。然后你可以根据事件的类型和内容来做出相应的处理。SDL_PollEvent()
是一个非阻塞函数,即如果没有事件发生,它会立即返回,不会阻塞程序的执行。
也就是说,内层循环中,SDL_PollEvent()
即使一直被反复执行,也不会发生阻塞,但其一直反复的等待事件发生,以便做出相应的处理。
查看评论