SDL2 显示文字 Linux
时间: 2025-02-02 22:14:12 浏览: 55
### 如何在 Linux 上使用 SDL2 显示文字
为了实现在 Linux 环境下利用 SDL2 库显示文字的功能,通常会借助 `SDL_ttf` 这一专门处理 TrueType 字体渲染的扩展库[^1]。下面将详细介绍具体实现方法并给出完整的 C 语言代码实例。
#### 准备工作
确保已经安装了必要的依赖项:
- SDL2 开发包
- SDL2_ttf 扩展库及其开发头文件
可以通过包管理工具如 apt-get 或 yum 来完成这些软件包的安装,在 Debian/Ubuntu 类系统上命令如下所示:
```bash
sudo apt-get install libsdl2-dev libsdl2-ttf-dev
```
对于 RedHat/CentOS/Fedora 用户,则应采用相应的 yum 命令进行安装。
#### 编写程序源码
创建一个新的 C 文件命名为 `hello_world.c` 并加入以下内容:
```c
#include <SDL.h>
#include <SDL_ttf.h>
int main(int argc, char* argv[]) {
// 初始化子系统
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("无法初始化 SDL: %s\n", SDL_GetError());
return 1;
}
TTF_Init(); // 初始化TTF模块
// 创建窗口
SDL_Window *win = SDL_CreateWindow(
"Hello World!", /* 窗口标题 */
SDL_WINDOWPOS_UNDEFINED, /* 初始X坐标 */
SDL_WINDOWPOS_UNDEFINED, /* 初始Y坐标 */
640, /* 宽度 */
480, /* 高度 */
SDL_WINDOW_SHOWN /* 属性标志 */
);
if (!win){
printf("无法创建窗口:%s\n", SDL_GetError());
goto cleanup_sdl; /* 若失败则跳转到清理部分 */
}
// 创建渲染器关联至上述窗口
SDL_Renderer *ren = SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED);
if(!ren){
printf("无法创建渲染器:%s\n", SDL_GetError());
goto cleanup_win;
}
// 加载字体资源
const int fontSize = 28;
TTF_Font *font = TTF_OpenFont("/usr/share/fonts/truetype/freefont/FreeSans.ttf",fontSize);
if(font==NULL){
printf("加载字体错误:%s\n",TTF_GetError());
goto cleanup_ren;
}
// 渲染字符串为表面对象
SDL_Color textColor={255,255,255};/* 白色 */
SDL_Surface *surfaceMessage=TTF_RenderText_Solid(font,"Hello World!",textColor);
if(surfaceMessage==NULL){
printf("文本表面创建失败:%s\n",TTF_GetError());
goto cleanup_font;
}
// 将表面转换成纹理以便GPU加速绘图
SDL_Texture *message=SDL_CreateTextureFromSurface(ren,surfaceMessage);
SDL_FreeSurface(surfaceMessage);
// 设置矩形区域用于指定绘制位置大小
SDL_Rect messageRect;
messageRect.x=(640-surfaceMessage->w)/2;/* 中心水平居中 */
messageRect.y=(480-surfaceMessage->h)/2;/* 中心垂直居中 */
messageRect.w=surfaceMessage->w;
messageRect.h=surfaceMessage->h;
// 循环等待直到按下任意键退出
while(true){
SDL_Event e;
if(SDL_PollEvent(&e)){
if(e.type==SDL_KEYDOWN || e.type==SDL_QUIT){break;}
}else{
SDL_RenderClear(ren);
SDL_RenderCopy(ren,message,NULL,&messageRect);
SDL_RenderPresent(ren);
}
}
cleanup_message:
SDL_DestroyTexture(message);
cleanup_font:
TTF_CloseFont(font);
cleanup_ren:
SDL_DestroyRenderer(ren);
cleanup_win:
SDL_DestroyWindow(win);
cleanup_sdl:
TTF_Quit();
SDL_Quit();
return 0;
}
```
这段代码实现了基本的文字渲染流程:先初始化所需组件;接着定义了一个固定尺寸的窗口作为展示界面;随后通过路径指定了具体的 .ttf 格式的字型档案,并设置了字号参数;最后把想要呈现出来的字符串转化为图形数据结构(即 surface),再进一步转变为适合 GPU 处理的形式——texture 后才真正被呈现在屏幕上[^3]。
#### 编译与运行
保存以上代码后,在终端里切换到该文件所在目录,执行下列指令来进行编译链接操作:
```bash
gcc hello_world.c -o hello_world $(pkg-config --libs --cflags sdl2 SDL2_ttf)
```
成功编译之后即可直接运行生成好的二进制文件查看效果:
```bash
./hello_world
```
如果一切正常的话应该能看到一个带有“Hello World!”字样正中央的小窗弹出。
阅读全文
相关推荐


















