我的方案是直接载入ttf文件解析,在内存中动态生成字模。上面的链接是微软对ttf文件的格式说明,我昨夜搞到半夜,以simsunb.ttf为测试对象,将字体文件的基本数据读取分析完成了,剩下就是对于轮廓数据的解析和显示。就整个方案来说10%完成度。
使用方法如下,都是伪代码
clge_font font =new clge_font(“simsunb.ttf”);
最终输出方案我还没写,不过脑子里已经构造的很清楚了。
输出一,输出到模型,其实就是采用输出二来实现,将会提供源码
clge_font.MakeMesh(顶点格式,string 输入字符串,模型尺寸)
输出二,输出成路径。
路径就是点列表。
用户可以使用这些路径去做效果,那我就不管了。比如在每条路径上搞一个闪光特效,结合楼上的输出一,就可以实现有一个围着字的边缘放烟花的效果。用户可以使用路径创建模型,我提供一些从路径创建模型的示例,比如创建带导角,和空心字模型。
clge_font.MakePathList(string 输入字符串)
输出三,输出到贴图
clge_font.WriteToTexture(ushort 字符,int 字号,RECT 目标输出区域)
输出四,直接绘制String
这个只是对输出三的封装,将会提供源码
ShowFont sfont = new ShowFont(clge_font 字体,int 字号,bool 采用动态缓存还是静态缓存)
//动态缓存就是只创建一张贴图,根据词频调整删除最早使用的。静态缓存在贴图放满字模时会再创建一张
SpriteBatch.begin();
sfont.draw(SpriteBatch,string 显示字符串,int x,int y);//提供采用SpriteBatch输出的实现,用户如果采用其他引擎做UI输出,对应修改源码即可。
SpriteBatch.end();