2024-3-20-SDL2开发二
三月 20, 2024
aaa
上一篇讲了SDL2项目首先要做的三件事,以及一些基础函数。
这篇接着搞没讲完的
第四件事,优化代码
添加
SDL_FreeSurface(gPNGSurface);
释放资源
添加SDL_UpdateWindowSurface( gWindow );
刷新屏幕
添加close();
关闭SDL2记得return 0;
(待补充)
- 第五件事 先会用SDL 1.0版本的 Surface SDL_Render系列,但是我现在懒得写,
示例
1 | gSurface = SDL_GetWindowSurface(gWindows); |
要使用先初始化,但是一旦初始化了Surface,gwindow就不可以用来初始化别的了。
- 第六件事,纹理和渲染器,SDL 2.0版本降临
Surface 和 Texture 的区别:
Surface 使用CPU进行处理,存在于内存
Texture使用GPU处理,背后使用了OpenGL和Direct3D接口,让游戏更流畅更快。
Render可以渲染Texture
创建渲染器:
1 | SDL_Renderer* renderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_SOFTWARE); |
其中SDL_RENDERER_SOFTWARE
代表使用软件加速,-1代表使用第一块显卡,而SDL_CreateRenderer
必须要接受3个参数。
ps: 除此之外的其他常量还有SDL_RENDERER_ACCELERATED
代表硬件加速,实际上就是2,而是软件加速是1
读取图像:
1 | SDL_Surface* loadedSurface = IMG_Load( path.c_str() ); |
然后转换
1 | SDL_CreateTextureFromSurface(loadedSurface); |
常见问题三
1 | ||=== 构建: Debug 在 demo04 中 (编译器: GNU GCC Compiler) ===| |
接收类型不正确?
排查了半天是头文件里的声明忘了
1 | extern SDL_Texture* gPNGSurface; |
在检查全局变量类型时,是按照头文件的传输类型来检查的。
SDL_Rect
结构体
SDL_Rect
结构体是Simple DirectMedia Layer (SDL) 中用于表示矩形区域的数据结构。它通常用于游戏开发和图形处理中。SDL_Rect
结构体包含四个整数成员,分别表示矩形区域的左上角的 x 和 y 坐标,以及矩形的宽度和高度。通过SDL_Rect
结构体,开发人员可以方便地定义、操作和管理矩形区域,用于绘制图形、碰撞检测等功能。- 也就是说,如果截取到了角落的部分则会被拉伸
查看评论