用 SDL2 在屏幕上打印文本

打印完图片,是时候打印文字了。这里引用了SDL的字体扩展库,SDL2_ttf.lib,需要包含相应的头文件。

环境:SDL2 + VC++2015

下面的代码将在窗口打印一段文字,并对相应的操作做出响应。

这次把错误处理给精简掉了,代码看起来更清爽。

 1 #include <iostream>
 2 #include "SDL.h"
 3 #include "SDL_ttf.h"
 4 
 5 int main(int argc, char** argv)
 6 {
 7     //屏幕宽度
 8     const int SCREEN_WIDTH = 680;
 9     const int SCREEN_HEIGHT = 400;
10     //初始化SDL
11     SDL_Init(SDL_INIT_EVERYTHING);
12     //初始化字体库
13     TTF_Init();
14     //创建窗口
15     SDL_Window *window = SDL_CreateWindow("Font Test",
16         SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
17         SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
18     //创建渲染器
19     SDL_Renderer *renderer = SDL_CreateRenderer(window, -1,
20         SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
21 
22     //打开字体
23     TTF_Font *font = TTF_OpenFont("XHei.TTC", 30);
24     //文本转表面
25     SDL_Color color = { 255, 255, 255 };
26     SDL_Surface *surf = TTF_RenderText_Blended(font, "Cool, Cooler, Coolest!", color);
27     //表面转纹理
28     SDL_Texture *text = SDL_CreateTextureFromSurface(renderer, surf);
29     //释放资源
30     SDL_FreeSurface(surf);
31     TTF_CloseFont(font);
32 
33     bool quit = false;
34     SDL_Event e;
35     //主循环
36     while (!quit)
37     {
38         //事件栈轮询
39         while (SDL_PollEvent(&e))
40         {
41             //按右上角的X或点鼠标退出
42             if (e.type == SDL_QUIT || e.type == SDL_MOUSEBUTTONDOWN) quit = true;
43             //清空渲染器
44             SDL_RenderClear(renderer);
45             //渲染字体
46             SDL_RenderCopy(renderer, text, NULL, NULL);
47             //呈现渲染器
48             SDL_RenderPresent(renderer);
49         }
50     }
51 
52     //释放资源
53     SDL_DestroyTexture(text);
54     SDL_DestroyRenderer(renderer);
55     SDL_DestroyWindow(window);
56 
57     SDL_Quit();
58 
59     return 0;
60 }

 

posted @ 2016-06-06 23:17  Joxon  阅读(2638)  评论(0编辑  收藏  举报