前言

  ImageFont继承于SceneObject,是一个场景对象,支持例如旋转,缩放,移动加速度以及物理碰撞等一切Torque中场景对象的一切功能.

  ImageFont只支持ASCII编码表中的32-127这么96个字符,字符的表现是通过一个ImageAsset文件配合一个对应的PNG图片来完成的.

  ImageAsset中的帧序列与32-Char的结果对应,从而完成渲染.

问题

  目前主流的字体生成器都没有支持Torque的格式导出,所以想自己做一款字体就比较麻烦.当然你可以去找图,毕竟原理上面已经说了,只要满足就可以.

  这里我说一种使用BitmapFont工具来生成,然后通过TorqueScript写的工具来做一次转换得到相应的Taml资产格式.

步骤

  BitMapFont

      免费软件,下载直接使用.

      勾选32-126的字符:

      

      选择字体和导出选项:

      

      保存文件并拷贝到Torque执行文件目录,比如生成的文件叫做: testFont.fnt testFont_0.png      

  脚本实现      

  1. // 转换
  2. function BMFontToImageAsset( %fnt_file, %asset_file, %asset_name, %asset_image )
  3. {
  4. // 文件读取
  5. %document = new SimXMLDocument();
  6. if( !%document.loadFile( %fnt_file ) )
  7. {
  8. echo( "BMFontToImageAsset.Failed.BadFntFile:" SPC %fnt_file );
  9. return false;
  10. }
  11.  
  12. // 节点寻找失败
  13.  
  14. if( !%document.pushFirstChildElement("font") )
  15. {
  16. echo( "BMFontToImageAsset.Failed.BadFntFile:" SPC %fnt_file );
  17. return false;
  18. }
  19.  
  20. // 节点寻找失败
  21. if( !%document.pushFirstChildElement("chars") )
  22. {
  23. echo( "BMFontToImageAsset.Failed.BadFntFile:" SPC %fnt_file );
  24. return false;
  25. }
  26.  
  27. // 节点寻找失败
  28. if( !%document.pushFirstChildElement("char") )
  29. {
  30. echo( "BMFontToImageAsset.Failed.BadFntFile:" SPC %fnt_file );
  31. return false;
  32. }
  33.  
  34. %savexml = new SimXMLDocument();
  35. %savexml.pushNewElement( "ImageAsset" );
  36. %savexml.setAttribute( "AssetName", %asset_name );
  37. %savexml.setAttribute( "ImageFile", %asset_image );
  38. %savexml.pushNewElement( "ImageAsset.Cells" );
  39.  
  40. // 循环查找32-127之间的ASCII字符信息
  41. while( true )
  42. {
  43. %id = %document.attribute("id");
  44.  
  45. // 不合法跳过
  46. if( %id < 32 || %id >= 127 )
  47. {
  48. echo( "BMFontToImageAsset.Failed.InvalidChar:" SPC %fnt_file );
  49. continue;
  50. }
  51.  
  52. // 属性取得
  53. %x = %document.attribute("x");
  54. %y = %document.attribute("y");
  55. %width = %document.attribute("width");
  56. %height = %document.attribute("height");
  57. echo( "Char: x=" @ %x SPC "y=" @ %y SPC "width=" @ %width SPC "height=" @ %height );
  58.  
  59. %savexml.pushNewElement( "Cell" );
  60. %savexml.setAttribute( "Offset", %x SPC %y );
  61. %savexml.setAttribute( "Width", %width );
  62. %savexml.setAttribute( "Height", %height );
  63. %savexml.popElement();
  64.  
  65. // 寻找下个字符
  66. if( !%document.nextSiblingElement("char") )
  67. break;
  68. }
  69.  
  70. // FNT文件关闭
  71. %document.clear();
  72. %document.delete();
  73.  
  74. // FNT中的字符数量应该是32-126,95个,不够96个字符,如果不够ImageFont是无法创建的.
  75. %savexml.pushNewElement( "Cell" );
  76. %savexml.setAttribute( "Offset", "1 1" );
  77. %savexml.setAttribute( "Width", 1 );
  78. %savexml.setAttribute( "Height", 1 );
  79.  
  80. // ImageAsset格式文件保存
  81. %savexml.popElement();
  82. %savexml.saveFile( %asset_file );
  83. %savexml.delete();
  84.  
  85. return true;
  86. }

  格式转换

      在控制台中输入: BMFontToImageAsset( "testFont.fnt", "FontConsolas48.asset.taml", "FontConsolas48", "FontConsolas48.png" )

      会在同级目录生成FontConsolas48.asset.taml文件,PNG自己改名字就可以了

   至于ImageFont的具体使用,参考自带的字体Toy即可,这里不再多说.

结语

  BMFont的导出格式中还有很多的参数,有兴趣的朋友可以继续研究.再见~

Torque2D MIT 学习笔记(27) ---- ImageFont的使用以及字体ImageAsset的工具生成的更多相关文章

  1. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. Linux下汇编语言学习笔记27 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  4. Kali学习笔记27:Burpsuite(上)

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 如果我只能选择一款工具进行Web渗透,那么一定就是Bu ...

  5. PHP全栈学习笔记27

    数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的元素合成字符串. 数组概述,数组是存储,管理和操作一组变量. 数组类型为一维数组,二维 ...

  6. 量化投资学习笔记27——《Python机器学习应用》课程笔记01

    北京理工大学在线课程: http://www.icourse163.org/course/BIT-1001872001 机器学习分类 监督学习 无监督学习 半监督学习 强化学习 深度学习 Scikit ...

  7. C++学习笔记27:异常处理机制

    一.异常处理机制基础 异常的定义 程序中可以检测的运行不正常的情况 异常处理的基本流程 某段程序代码在执行操作时发生特殊情况,引发一个特定的异常 另一段程序代码捕获该异常并处理它 二.异常的引发 th ...

  8. CUBRID学习笔记 27 数据类型4

    范围比较 数字和字符串比较 字符串被转为double SELECT i FROM t WHERE i <= all {'11','12'}; i ============= 1 2 3 4 字符 ...

  9. android学习笔记27——Activity

    Activity配置==> android应用程序要求所有的应用程序组件都需要进行显示配置后,才可正常使用.包括:Activity.Service.BroadCastReceiver.Conte ...

随机推荐

  1. CoreAnimation实现一个折线表

    将折现表封装到一个view里,暴露给使用者的只有一个传入数据的方法. // // ChartLine.h // BoxingChampion //功能:根据传入的数组,绘制折线图 注意 其frame的 ...

  2. 【html】【0】开始的序言

    人生总得做点什么才显得有意义,在牛逼的梦想也抵挡不住你傻逼似的坚持! 1>本系列适用于没有任何计算机语言基础的小白入门级教程 2>为了我喜欢的一个女生小娜娜 3>为自己系统的学习ht ...

  3. 原生与jqueryDOM

    总结与复习原生与jquery的DOM操作. 获取元素节点: $(".class") $("#id") $(".class div") $(& ...

  4. Mac OS X 好用的软件包管理工具 Homebrew

    github地址:https://github.com/Homebrew/homebrew 安装方法:http://brew.sh/

  5. [Linux]Vim的安装及使用

    1.安装:$sudo apt-get install vim 2.查看Vim所在路径$whereis vim 3.启动Vim $'/usr/bin/vim.tiny'  4. 退出Vim窗口:Ctrl ...

  6. PHPCMS标签大全

    {$head[title]} 页面标题,用法: {$phpcms[sitename]} 网站名称 用法: {$head[keywords]} 要害字 用法: {$head[description]} ...

  7. 精通 Oracle+Python,第 4 部分:事务和大型对象

    通过 Python 管理数据事务.处理大型对象 2010 年 3 月发布 事务包含一组 SQL 语句,这组 SQL 语句构成数据库中的一个逻辑操作,如转帐或信用卡支付操作.将 SQL 语句聚合到一个逻 ...

  8. Java 内存区域和GC机制--备用

    Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 ...

  9. C#反射(一) 【转】

    在还不太熟悉反射的昨天,以为反射很神秘,在网上到处找答案.今天找了段代码敲了一下,茅塞顿开!其实反射也就那么简单的一回事!    反射是一种机制,通过这种机制我们可以知道一个未知类型的类型信息.比如, ...

  10. git实现版本回退

    1. 首先查看自己的版本: ***:~/piaoshifu_object/epiao.piaoshifu.cn$ git log commit c8d5c67861d2d0e21856cc2b4f60 ...