手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

​SDL2使用-第一课 初始化和创建窗口

时间:2024-10-11 20:47:29

1、本课,我们来讲解初始化SD雉搽妤粲L2和创建一个窗口,并且将屏幕绘制成大红色:在SDL2上比SDL1.2多出了一个SDL_Window结构体,意味着我们可以创建多邗锒凳审个窗口。。。当然 不是在C4droid上,在C4droid上我们只能创建一个窗口。。。感觉被阉割了。。非使用C4droid的读者在使用SDL2前请参考SDL_GUI吧的教程自行配置SDL2.0,没有合适IDE的推荐codeblocks。。。 在使用SDL2前先包含头文件。。在C4droid上使用时,头文件必须在入口源代码文件(编译时打开的源代码文件)中包含,保证C4droid打开SDL插件。#include <SDL2/SDL.h>#include "log.h"包含头文件后即可使用SDL2定义的函数,log.h是本人写的一个小函数库,定义了一个函数plog,用法和printf相同;一个PLOG宏,可以输出调试信息。 接下来我们要声明两个结构体作为绘图的主体,窗口(SDL_Window)和一个表面(SDL_Surface):// 窗口SDL_Window *Window = NULL;// 窗口表面SDL_Surface *WindowScreen = NULL;接下来我们定义一个初始化函数://初始化函数int Init() { SDL_Init(SDL_INIT_VIDEO);函数SDL_Init用来初始化SDL2,这里我们使用了SDL_INIT_VIDEO作为初始化的可选参数,在本课代码中只需要初始化视频功能就好,初始化后我们来创建窗口并且检查创建成功没有:// 创建窗口Window = SDL_CreateWindow("SDL_Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 240, 400, SDL_WINDOW_SHOWN); if (Window == NULL) { PLOG; return -1; }SDL_CreateWindow函数用来创建窗口,第一个参数是窗口的标题,第二、三个参数指明了窗口的位置信息,在电脑的程序上用来指明窗口出现的位置, 在C4droid上就不需要了,它不管设置多少都没用,第四、五个参数是窗口的大小(长、宽),最后一个参数是窗口的 状态,SDL_WINDOW_SHOWN,表示显示窗口;不过我更喜欢SDL_WINDOW_BORDERLESS,这样。。SDL2创建的窗口就没有那些标题和窗口的最大化之类的按键了 ;最后一个参数是可选参数,详细请参考SDL WIKI的名为SDL_WindowFlags枚举类型,接下来我们将表面绑定到窗口上: // 获取Window的表面 WindowScreen = SDL_GetWindowSurface(Window); if (WindowScreen == NULL) { PLOG; return -2; } return 0;}SDL_GetWindowSurface函数可以获取窗口的表面并且返回SDL_Surface指针,值得注意的是这个函数有一定的局限性, 在窗口使用渲染器(以后会说)后就无法使用它获取窗口的表面。初始化结束了,接下来就是退出函数//清理函数void Destroy() { SDL_FreeSurface(WindowScreen); SDL_DestroyWindow(Window); SDL_Quit();}SDL2创建的结构体指针的内存无法自动释放,是需要用函数释放的,每种结构体有其特定的释放函数,如SDL_Window用SDL_DestroyWindow释放,SDL_Surface用SDL_FreeSurface释放,名字之所以有些不同是继承自SDL1.2,然后就是退出SDL2,用函数SDL_Quit退出;之后就到了主函数,函数参数必须使用完全版本的main函数,值得注意的是,main函数必须首先调用,因为它不是正真的main函数!它只是一个被替换的宏(见SDL_main.h:83:#define main SDL_main)int main(int args, char *argv[]){ if (Init() != 0) return -1; //填充窗口 SDL_FillRect(WindowScreen, NULL, SDL_MapRGB(WindowScreen->format, 0xFF, 0x00, 0x00));函数SDL_FillRect是一个用来操作SDL_Surface的函数,它的作用是在表面上填充一个矩形区域,第一个参数是填充的目标表面,第二个是填充的矩形区域,接受一个SDL_Rect参数,如今设置为NULL,则默认全部填充,第三个参数是填充矩形用的颜色,但是我们看到在这里用了一个SDL_MapRGB来指定颜色,这是因为我们不知道WindowScreen使用的颜色格式,第一个参数获取了WindowScreen的颜色格式,然后通过后面的3个参数混合一种颜色,SDL_MapRGB会将这颜色转换成输入的颜色格式并返回,关于混合色用的是色彩三原色红、绿、蓝来混合,每种颜色取值为0x0~0xFF也就是一个字节,这里我们用了全红0xFF,绿蓝都取0,这样混合的颜色为大红色,效果稍后看截图: SDL_UpdateWindowSurface(Window); SDL_Delay(2000); Destroy(); return 0;}这一段用了两个函数,SDL_UpdateWindowSurface将我们在之前绑定了窗口表面的WindowScreen上的操作应用到窗口上,SDL_Delay的作用是暂停屏幕,相当于暂停,接下来看运行结果截图:

​SDL2使用-第一课 初始化和创建窗口

2、看看其他参数改变后运行效果图:Window = SDL_CreateWindow("SDL_Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 240, 400, SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS); SDL_MapRGB(WindowScreen->format, 0x00, 0xFF, 0x00)

​SDL2使用-第一课 初始化和创建窗口

3、Window = SDL_CreateWindow("SDL_Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 240, 400, SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS); SDL_MapRGB(WindowScreen->format, 0x00, 0xFF, 0xFF)

​SDL2使用-第一课 初始化和创建窗口
© 手抄报圈