SDL_ttf 可从此处下载。
要安装SDL_ttf,请查看前面的扩展库安装教程。安装SDL_ttf的方法与安装SDL_image极其相似,你仅需将前面教程中的SDL_image替换为SDL_ttf。
Linux/Unix 用户还需要链接freetype库。
本课介绍了SDL_ttf的基本用法。
//表面 SDL_Surface *background = NULL; SDL_Surface *message = NULL; SDL_Surface *screen = NULL; //事件结构体 SDL_Event event; //将要用到的字体 TTF_Font *font = NULL; //字体的颜色 SDL_Color textColor = { 255, 255, 255 };
这里,我们有一些变量。其中包括了前面教程中所涉及的背景表面、窗口表面以及事件结构体。此外我们还有一个用于存储文本的“信息”表面。
这里还有一个新的数据类型
如果你想要了解更多有关
这里还有一个新的数据类型
TTF_Font
,它是我们将要使用的字体,另外还有一个SDL_Color
类型的变量,它是我们渲染文本时将要使用的颜色。在本课中,我们使用白色来渲染文本。如果你想要了解更多有关
SDL_Color
数据类型的信息,你可以查看SDL文档。bool init() { //初始化所有SDL子系统 if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) { return false; } //设置窗口 screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); //如果设置窗口出错 if( screen == NULL ) { return false; } //初始化SDL_ttf if( TTF_Init() == -1 ) { return false; } //设置窗口标题 SDL_WM_SetCaption( "TTF Test", NULL ); //如果所有初始化都成功 return true; }
这是我们的初始化函数。这和之前的很相似,只是这次我们还要初始化SDL_ttf。
SDL_ttf 是通过调用
SDL_ttf 是通过调用
TTF_Init()
完成初始化的。如果期间出现错误,该函数会返回 -1。 TTF_Init()
必须在使用任何其他 SDL_ttf 的函数前被调用。bool load_files() { //加载背景图片 background = load_image( "background.png" ); //打开字体 font = TTF_OpenFont( "lazy.ttf", 28 ); //如果背景加载出错 if( background == NULL ) { return false; } //如果字体加载出错 if( font == NULL ) { return false; } //如果加载正常 return true; }
这是文件加载函数。要加载 *.ttf 字体,必须使用
该函数的第一个参数是你想要打开的字体文件的文件名,第二个参数是你在打开字体文件时想要设定的字体大小。
如果加载字体时出现错误,
TTF_OpenFont()
函数。该函数的第一个参数是你想要打开的字体文件的文件名,第二个参数是你在打开字体文件时想要设定的字体大小。
如果加载字体时出现错误,
TTF_OpenFont()
会返回NULL。//渲染文本 message = TTF_RenderText_Solid( font, "The quick brown fox jumps over the lazy dog", textColor ); //如果渲染文本时出现了错误 if( message == NULL ) { return 1; } //将图像应用到窗口上 apply_surface( 0, 0, background, screen ); apply_surface( 0, 150, message, screen ); //更新窗口 if( SDL_Flip( screen ) == -1 ) { return 1; }
这里是main函数里的进行渲染的代码。
最快的渲染文本的方式是使用
该函数的第一个参数是字体,第二个参数是文本,第三个参数是颜色,它会使用这些来创建一个表面。
如果出现错误,该函数返回NULL。
当然还有别的渲染文本的方式,请到 SDL_ttf 文档中查看。对于部分Linux用户,
最快的渲染文本的方式是使用
TTF_RenderText_Solid()
函数。
该函数的第一个参数是字体,第二个参数是文本,第三个参数是颜色,它会使用这些来创建一个表面。
如果出现错误,该函数返回NULL。
当然还有别的渲染文本的方式,请到 SDL_ttf 文档中查看。对于部分Linux用户,
TTF_RenderText_Solid()
可能不能正常工作,此时请升级一下freetype(这是SDL_ttf 所依赖的库)和SDL_ttf。如果这样还不行,请改用TTF_RenderText_Shaded()
。void clean_up() { //释放表面 SDL_FreeSurface( background ); SDL_FreeSurface( message ); //关闭用过的字体 TTF_CloseFont( font ); //退出SDL_ttf TTF_Quit(); //退出SDL SDL_Quit(); }