SDL系列讲解(八) SDL_ttf教程
关于游戏开发,当前还在调试,一款移植的随后先推出,自己开发的需要稍等几周,近期比较忙,时间不充裕,大家谅解。同时,对于android开发中的任意问题,可以留言,想了解哪方向的知识,可以回复,如果有能力,可以进行讲解的,后续我便会进行展开,以便更准确的帮助到大家。
感谢一路大家的支持与厚爱。
前言
讲解完了图片,这节我们来看下怎么显示文字。
下载配置SDL_ttf库
打开官网 https://www.libsdl.org/projects/SDL_ttf/,下载库。
下载下来之后,跟我们之前的sdl image一样,放置在jni目录下:
下载完毕之后,我们继续 http://download.savannah.gnu.org/releases/freetype/下载freeetype代码
下载下来freetype-2.8.tar.gz之后,将其解压到jniSDL2_ttfexternal下面,并且重命名为freetype。
修改Android.mk
首先,我们需要修改SDL2_ttf目录里面的Android.mk
将
FREETYPE_LIBRARY_PATH := external/freetype-2.4.12
改成
FREETYPE_LIBRARY_PATH := external/freetype
同时需要将
$(FREETYPE_LIBRARY_PATH)/src/base/ftxf86.c 删掉,因为升级后的版本里面,没有这个文件,需要去掉.
然后在我们的android-project/app/src/main/jni/src 下的Android.mk里面,加入 LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include
$(LOCAL_PATH)/../SDL2_ttf
同时在LOCAL_SHARED_LIBRARIES := SDL2 SDL2_image后面加上 SDL2_ttf
测试字库
从网上下载一个中文字库,放置在asserts目录下,起名字为font.ttf
main.c加入头文件
#include "SDL_ttf.h"
然后我们使用:
//初始化字库
if(TTF_Init()==-1) {
printf("TTF_Init: %sn", TTF_GetError()); return 1;
}
//打开字库
TTF_Font *font;
font=TTF_OpenFont("font.ttf", 64);
if(!font) {
printf("TTF_OpenFont: %sn", TTF_GetError());
}
初始化以及打开字库,使用16号字体创建
DrawText(bmp,font,"代码GG");
这里DrawText的代码是:
int DrawText(SDL_Surface* screen, TTF_Font* font, const char* text)
{
SDL_Color color = {0,0,0};//颜色
SDL_Surface *text_surface;
text_surface = TTF_RenderUTF8_Solid(font, text, color);
if (text_surface != NULL)
{
SDL_BlitSurface(text_surface, NULL, screen, NULL);//将文字复制到屏幕的surface上面
SDL_FreeSurface(text_surface);
return 1;
} else {
// report error
return 0;
}
}
这里我们使用了 TTF_RenderUTF8_Solid 来完成加载出字体的surface来. 主要关注在UTF8,我们默认的编辑器编码是这个格式,所以我们要使用这个方法。
就是这么简单,我们便完成了字体显示。
效果
我们可以看到,左上角显示了代码GG。
抗锯齿显示字体
如果我们想要在字体缩放的时候,不要出现锯齿的现象,可以使用:
TTF_RenderUTF8_Blended 系列的方法来进行加载字体。 这里我们演示下,将DrawText方法修改成:
int DrawText(SDL_Surface* screen, TTF_Font* font, const char* text)
{
SDL_Color color = {0,0,0};//颜色
SDL_Surface *text_surface;
text_surface = TTF_RenderUTF8_Solid(font, text, color);
TTF_RenderUTF8_Blended(font, text, color);
if (text_surface != NULL)
{
SDL_BlitSurface(text_surface, NULL, screen, NULL);//将文字复制到屏幕的surface上面
SDL_FreeSurface(text_surface);
} else {
// report error
return 0;
}
text_surface= TTF_RenderUTF8_Blended(font, text, color);
if (text_surface != NULL)
{
SDL_Rect des_pos={0,TTF_FontHeight(font),screen->w,screen->h};
SDL_BlitSurface(text_surface, NULL, screen, &des_pos);//将文字复制到屏幕的surface上面
SDL_FreeSurface(text_surface);
return 1;
} else {
// report error
return 0;
}
}
效果如下:
这里我们可以看到,下面显示的比上面的平滑了很多。
更多详细用法
关注http://sdl.beuc.net/sdl.wiki/SDL_ttf
- Gitlab CI 自动部署 asp.net core web api 到Docker容器
- 从XMLHttpRequest请求响应里getResponseHeader(header)报错:Refused to get unsafe header "**" 问题解决
- 全面理解 ASP.NET Core 依赖注入
- jq实现上传头像并实时预览功能
- 初探领域驱动设计(2)Repository在DDD中的应用
- js取整并保留两位小数的方法
- 异步编程 In .NET
- 判断标签是否包含class的方法
- vue.js使用props在父子组件之间传参
- JS中使用正则表达式替换对象里的大小写
- JS中const、var 和let的区别
- 动态计算rem的js代码
- 阻止浏览器冒泡事件,兼容firefox和ie
- JS使用循环按指定倍数分割数组组成新的数组的方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 利用burpsuite+sqlmap POST自动化注入详解
- GSoC: GitHub Checks API 项目第一阶段总结
- GoldenEye靶机渗透
- RBash - 受限的Bash绕过
- 【Rust日报】2020-08-10:在 Rust 中存储连续数据
- 用 Docker 打包 Node.js 程序
- 再见! JSP !
- SocketFTP多线程处理
- 面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》
- Xray配合awvs漏洞扫描
- 无聊的MISC题解
- MISC-convert | 旋转跳跃
- MISC-多彩
- Web-高明的黑客
- CVE-2017-7529 Nginx整数溢出漏洞分析