SDL学习笔记(2):Init与SDL_Func的使用

初始化SDL_Func

以下SDL函数须在调用其它SDL函数之前先行调用

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
// SDL初始化
if (SDL_Init(SDL_INIT_EVERYTHING) == -1) {
cout << SDL_GetError() << std::endl;
return 1;
}
// 创建窗口
window = SDL_CreateWindow("WindowName",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
if (window == nullptr) {
cout << SDL_GetError() << std::endl;
return 2;
}
// 创建渲染器
renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (renderer == nullptr) {
cout << SDL_GetError() << std::endl;
return 3;
}
// 初始化字体库(如果不使用SDL字体库可以省略)
if (TTF_Init() == -1) {
std::cout << TTF_GetError() << std::endl;
return 4;
}

常用SDL_Func

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
34
35
36
37
38
// 加载图片
SDL_Texture *tex = nullptr;
tex = IMG_LoadTexture(renderer,filename);
if (tex == nullptr) {
throw runtime_error("Failed to load image." + string(filename) + IMG_GetErro());
}
// 加载字体
TTF_Font *font = TTF_OpenFont("fontfile",int size);
if (font == nullptr) {
throw std::runtime_error("Failed to load font: " + string("fontfile") + TTF_GetError());
}
// 在窗口显示图片
SDL_Rect pos;
pos.x = x; //横坐标
pos.y = y; //纵坐标
SDL_QueryTexture(texture,NULL,NULL,&pos.w,&pos.h);
SDL_RenderCopy(renderer,texture,NULL,&pos);
// 在窗口显示字体
SDL_Color color = {0, 0, 0};
SDL_Surface *surf = TTF_RenderText_Blended(TTF_Font*,char *str,color);
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,surf);
// 按坐标加载图片
SDL_Rect pos = {pic_x,pic_y,pic_width,pic_hight};
SDL_RenderCopy(SDL_Renderer*,SDL_Texture*,NULL,&pos);
// 按坐标和角度加载图片
SDL_RendererFlip flip = SDL_FLIP_NONE;
SDL_RenderCopyEx(SDL_Renderer*,SDL_Texture*,NULL,NULL,double,&point,flip);
// 显示渲染器
SDL_RenderPresent(SDL_Renderer*);
// 延时
SDL_Delay(1000);

SDL资源清空与释放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 释放字体
TTF_CloseFont(TTF_Font*);
// 释放surface
SDL_FreeSurface(SDL_Surface*);
// 清空渲染器
SDL_RenderClear(SDL_Renderer*);
// 释放texture资源
SDL_DestroyTexture(SDL_Texture*);
// 释放渲染器资源
SDL_DestroyRenderer(SDL_Renderer*);
// 释放窗口资源
SDL_DestroyWindow(SDL_Window*);
// 退出
SDL_Quit();



我会继续更新我的SDL学习历程,虽然是一些之前的学习过程的回忆,但是我希望我写的这些对读者有所帮助。如果你对SDL有兴趣,可以继续关注我的博客,我会尽快将之前的开发经历尽可能的补充完全。