建设网站需要哪些语言,200做网站,怎么做网页中间部分,服装网页设计模板图片1.简介
SDL本身没有显示文字功能#xff0c;它需要用扩展库SDL_ttf来显示文字。ttf是True Type Font的缩写#xff0c;ttf是Windows下的缺省字体#xff0c;它有美观#xff0c;放大缩小不变形的优点#xff0c;因此广泛应用很多场合。
使用ttf库的第一件事要从Windows的…1.简介
SDL本身没有显示文字功能它需要用扩展库SDL_ttf来显示文字。ttf是True Type Font的缩写ttf是Windows下的缺省字体它有美观放大缩小不变形的优点因此广泛应用很多场合。
使用ttf库的第一件事要从Windows的字库下拷贝出一个字库出来最好是中文字体这样可以同时支持英文和中文显示。它一般在c:windowsfonts 目录下面。比如simhei.ttf 就是仿黑体的字库将这个文件拷贝到你的源文件目录下。
要使用SDL_ttf库首先要下载该扩展库为了方便我使用的开发环境是Windows。
下载地址Releases · libsdl-org/SDL_ttf · GitHub 我使用的是2.20.0的版本下载我框出来的那个zip包。
2.配置环境
先拷贝SDL_ttf的头文件和库文件到目的目录下如下图所示 VS的配置请看SDL2 简单介绍以及Windows开发环境搭建-CSDN博客
目录4.配置跟配置SDL库一样的配置。
3.使用步骤
SDL_ttf的编程的核心数据结构是 TTF_Font所有的文字输出都是围绕这个结构展开的。
初始TTF库创建一个对应某个字体文件的TTF_Font.用TTF输出函数把一段文字输出成SDL_Surface.其中TTF_font是其中必须参数把这个SDL_Surface 输出到屏幕显示如果不需它必须释放它释放TTF_Font关闭TTF库
4.接口说明
要想显示文字首先要将文字渲染成一副图像将文字渲染成一个图像表面有三种渲染方式
TTF_RenderText_Solid渲染的最快但效果最差文字不平滑是单色文字不带边框。TTF_RenderText_Shaded比TTF_RenderText_Solid渲染的慢但显示效果好于Solid带阴影。TTF_RenderUTF8_Blended渲染最慢但显示效果最好。
SDL_ttf有好几个关于文字高度和宽度的方法
int TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h) ;求英文/数字文本高度和宽度,返回值为0表示测试成功int TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h) ;求UTF-8文本高宽int TTF_SizeUNICODE(TTF_Font *font, const Unit16 *text, int *w, int *h) ;求Unicode文本高宽
TTF使用TF_SetFontStyle(TTF_Font *font, int style)显示特殊效果style 参数可以设为如下几种效果
TTF_STYLE_BOLD #粗体TTF_STYLE_ITALIC #斜体TTF_STYLE_UNDERLINE #下划线TTF_STYLE_STRIKETHROUGH #删除线即中划线
如果Style设为 TTF_STYLE_NORMAL, 效果将变成缺省效果。
显示中文代码直接采用数字编码。
Uint16 msg[1024] {0x4F60,0x597D,0}; //Unicode 编码:你好
message TTF_RenderUNICODE_Solid( font, msg, textColor );
5.示例 #include stdio.h
#include SDL.h
#include SDL_ttf.h#define WINDOW_W 800
#define WINDOW_H 640#undef main
int main(int argc,char* argv[])
{/*SDL初始化*/SDL_Init(SDL_INIT_VIDEO);/*TTF初始化*/TTF_Init();/*创建窗口*/SDL_Window *window SDL_CreateWindow(SDL SHOW TEXT, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_W, WINDOW_H, SDL_WINDOW_SHOWN);/*创建渲染器*/SDL_Renderer *render SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);/*设置渲染器颜色*/SDL_SetRenderDrawColor(render, 255, 255, 255, 255);/*清空渲染器*/SDL_RenderClear(render);/*打开字库*/TTF_Font *ttffont TTF_OpenFont(GBK.ttf, 50);if (ttffont NULL){printf(simkai.ttf open failed\n);return 0;}/*字体颜色RGBA*/SDL_Color color { 52,203,120,255 };SDL_Color bgColor { 33,33,33,255 };/*设置字体大小*/TTF_SetFontSize(ttffont, 60);/*字体加粗*/TTF_SetFontStyle(ttffont, TTF_STYLE_NORMAL);/*创建字体显示表面*/SDL_Surface *text1_surface TTF_RenderUTF8_Blended(ttffont, Hello,SDL!, color);/*创建纹理*/SDL_Texture * texture SDL_CreateTextureFromSurface(render, text1_surface);/*将surface拷贝到渲染器*/SDL_Rect dstrect;dstrect.x WINDOW_W / 2 - text1_surface-w / 2;/*显示的起始位置*/dstrect.y 100;/*显示的起始位置*/dstrect.w text1_surface-w;/*显示的宽度*/dstrect.h text1_surface-h;/*显示的高度*//*创建字体显示表面*///SDL_Surface *text1_surface TTF_RenderUTF8_Blended(ttffont, Hello,SDL!, color);Uint16 msg[10] { 0x4F60,0x597D,,,T,T,F,0 }; //Unicode 编码:你好SDL_Surface *text2_surface TTF_RenderUNICODE_Solid(ttffont, msg, color);/*创建纹理*/SDL_Texture * texture2 SDL_CreateTextureFromSurface(render, text2_surface);/*将surface拷贝到渲染器*/SDL_Rect dstrect2;dstrect2.x WINDOW_W / 2 - text2_surface-w / 2;/*显示的起始位置*/dstrect2.y 180;/*显示的起始位置*/dstrect2.w text2_surface-w;/*显示的宽度*/dstrect2.h text2_surface-h;/*显示的高度*/bool bQuit false;SDL_Event windowEvent;while (!bQuit) {while (SDL_PollEvent(windowEvent)) {switch (windowEvent.type) {case SDL_QUIT:bQuit true;break;default:break;}}SDL_RenderClear(render);SDL_RenderCopy(render, texture, NULL, dstrect);SDL_RenderCopy(render, texture2, NULL, dstrect2);SDL_RenderPresent(render);}SDL_FreeSurface(text1_surface);/*释放surface*/SDL_DestroyTexture(texture);/*释放纹理*/TTF_CloseFont(ttffont);TTF_Quit();return 0;
}