首页 > 代码库 > SDL系列之 - 编译参数

SDL系列之 - 编译参数

例9.7:设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,使用SDL_ttf库在屏幕上显示“Linux下TrueType字体显示示例”,字体大小为38,颜色为红色。设程序名为9-7.c,存放在/home/cx/下。
准备工作:把windows下C:\WINDOWS\Fonts中的simsun.ttc文件拷贝到Linux下的/usr/share/fonts/下,用于显示中文。
编辑源程序代码:

 1 #include <SDL.h>
 2 #include <stdlib.h>
 3 #include <SDL_ttf.h>
 4 int main()
 5 {
 6         SDL_Surface *text, *screen;     //一个屏幕指针
 7         SDL_Rect drect;         //目标矩形
 8         TTF_Font *Nfont;        //文字样式对象
 9         SDL_Color red={ 255, 0, 0, 0 }; //设置字体颜色
10         int fontsize=38;                //设置字体大小
11         if(SDL_Init(SDL_INIT_VIDEO) < 0){       //初始化视频子系统失败
12                 fprintf(stderr,"无法初始化:%s\n",SDL_GetError());       //不能用printf(),因为没有包含stdio.h头文件
13                 exit(1);
14         }   
15         //设置视频模式
16         screen=SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
17         if(screen==NULL){
18                 fprintf(stderr,"无法设置视频模式:%s\n",SDL_GetError());
19                 exit(1);
20         }   
21         atexit(SDL_Quit);       //退出
22 
23         if(TTF_Init()!=0){      //初始化字体
24                 fprintf(stderr,"Can‘t init ttf font!\n");
25                 exit(1);
26         }   
27 
28         //打开字体库
29         Nfont=TTF_OpenFont("/usr/share/fonts/simsun.ttc",fontsize);
30         TTF_SetFontStyle(Nfont,TTF_STYLE_NORMAL);       //设置字体样式
31         text=TTF_RenderUTF8_Blended(Nfont, "Linux下TureType显示示例",red);
32         TTF_CloseFont(Nfont);           //关闭字体库
33         TTF_Quit();             //退出
34         drect.x=40;             //在点(240,160)处开始写
35         drect.y=60;
36         drect.w=text->w;        //目标矩形的宽和高分别是所写字体的宽和高
37         drect.h=text->h;
38         SDL_BlitSurface(text, NULL, screen, &drect);    //把目标对象快速转化
39         SDL_UpdateRect(screen,0,0,0,0);         //更新整个屏幕
40         SDL_FreeSurface(text);          //释放写有文字的surface
41         SDL_Delay(5000);                //让屏幕停留5秒钟的时间
42 
43         return 0;
44 }

 

SDL做文字显示在编译链接的时候记得要加上  -I /usr/include/SDL/ -lSDL -lSDL_ttf -lpthread 啊

特别是 -lSDL_ttf ,否则会报类似 undefined reference to `TTF_Init 类似的错误

 

如果第29行  Nfont=TTF_OpenFont("/usr/share/fonts/simsun.ttc",fontsize); 换成 Nfont=TTF_OpenFont("/usr/share/fonts/georgiai.ttc",fontsize); 即Windows下的另一种字体,编译能通过,但运行时会报段错误

技术分享

 

另:atexit(SDL_Quit);的作用是在程序退出时调用SDL_Quit()函数,这样就不必在每个要退出的地方都调用SDL_Quit()。

 

最后写出来的程序运行如下

技术分享

 

SDL系列之 - 编译参数