当前位置: 首页 > news >正文

发个XNA中文字体生成的辅助小工具

这是最近两天小弟微调LGame C#版时,新增的辅助工具,该程序可以通过 http://loon-simple.googlecode.com/svn/trunk下载最新的LGame-0.3.3-Beta包获得(位于C#子类,tools文件夹下),文件名【CharacterRegionTool(C#).exe】,不附带源码,不过也没有任何混淆,想看源码反向下也就是了(PS:此物乃标准.Net程序,没有.Net环境无法运行。当然,没有.Net环境者同样无法进行XNA开发……)。

需要说明的是,该工具对已发布的Java(Android)版,以及尚未发布的C/C++与HTML5版没有任何影响或帮助,仅用于自动生成XNA开发中【.spritefont】文件中的CharacterRegions元素,也就是生成xnb图像字体时所能编译出的具体中文字符(或其它特殊字符,阿拉伯语之类~)。

之所以会增加这样一个小工具,源于XNA的运行环境并非全部支持GDI+编程(并不是所有环境都能调用到System.Drawing这一命名空间)。因此,一旦我们希望程序可以在Windows、XBOX,WP7乃至Mono的扩展环境中同样运行游戏,我们就无法直接调取系统的TTF字体,来进行游戏开发所必需的文字显示。而只能选择使用XNA自带的SpriteFont文字贴图方式(或者其他类似的文字贴图方式,比如LGame自带的BMFont类)。

PS:不过,等LGame-0.3.3正式发布时,小弟会给C#版添加一个跨平台的TTF字体文件支持功能,注意,只是读取TTF文件,不能直接获得本地字库支持。

目前来说,SpriteFont在处理英文乃至欧洲其他国家文字时,不会有任何问题存在,因为字母是有穷的,只要我们设定好CharacterRegions中字母表的区间范围,一种英文字体,产生出一个至多1MB左右的xnb文件,就已足够。但是,在设定中文字体时,则随便导出一种汉字字体的完整支持,都将动辄产生出十几MB的xnb文件。而手动设定汉字字符又较耗时间,很难要求用户将长篇大论导分解成一个个<CharacterRegion>……</CharacterRegion>子元素。

这种现实情况,势必影响到WP7、XBOX开发者的使用积极性(至少会影响到简体,正体用户的C#版中文游戏开发吧……),所以小弟为LGame增加了下面这个小小的辅助工具(当然,就算不上LGame,需要.spritefont进行汉字支持的地方依旧可以使用。话说谁有空研究下用中文字根拼字造图啊,原理依照永字八法啥的~),用以自动生成整篇中文的具体CharacterRegions元素,多少缓解下XNA下中文开发难的囧态~

运行示例图如下:



另外,不用担心字符重复,默认情况下已经剔除了重复元素:


_______________


另,明天有时间的话,小弟再整理点Java游戏源码发出来。


相关文章:

  • 教你如何迅速秒杀99%的海量数据处理面试题
  • Android开发性能提升
  • Java游戏源码大礼包(清明有爱强化版)
  • 浅谈STG游戏的开发(4月8日更新,已补全内容)
  • J2me游戏引擎的基本构成
  • 感知世界触景生情——增强现实技术
  • Android游戏源码合集(主要是AndEngine和Libgdx的)
  • 继续群发Android游戏源码(再发15款)
  • (NSDate) 时间 (time )比较
  • CSDN的博客系统比以前快多了
  • Android之AndroidManifest.xml文件解析
  • Android权限
  • Android权限目录
  • Android的所有权限说明
  • hdu 4099 Revenge of Fibonacci 2011 Asia Shanghai Regional Contest
  • conda常用的命令
  • css系列之关于字体的事
  • Effective Java 笔记(一)
  • Git 使用集
  • Java多线程(4):使用线程池执行定时任务
  • leetcode388. Longest Absolute File Path
  • SpringCloud集成分布式事务LCN (一)
  • 成为一名优秀的Developer的书单
  • 你不可错过的前端面试题(一)
  • 普通函数和构造函数的区别
  • 小程序 setData 学问多
  • 协程
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 鱼骨图 - 如何绘制?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​低代码平台的核心价值与优势
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • ### RabbitMQ五种工作模式:
  • #### golang中【堆】的使用及底层 ####
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (10)ATF MMU转换表
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (面试必看!)锁策略
  • (十三)Flask之特殊装饰器详解
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .net 4.0发布后不能正常显示图片问题
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @EventListener注解使用说明
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [383] 赎金信 js
  • [Angular] 笔记 18:Angular Router
  • [autojs]autojs开关按钮的简单使用
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [bzoj2957]楼房重建
  • [C#]调用本地摄像头录制视频并保存