xna教程(四)——在xna中绘制字体

作者:clayman
仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
Blog:
http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn
  

          在 XNA 中绘制字体是一件很麻烦的事。由于 XNA 是跨平台的,而在 Xbox 360 中,并不存在系统字体,所以,目前的 xna 并不支持绘制字体。虽然我们仍然可以使用一些方法,在 xna 中调用 GDI+ 来绘制字体,但这样你的程序就失去了跨平台性,同时,调用 GDI+ 也会影响绘图的效率,因此,这不是一个推荐的方法。那应该如何来做呢?
         目前较好的解决方案是使用位图字体( Bitmap Font )。所谓位图字体,其实就是预先把字体制作为一张位图,之后,就可以把位图当作字体来使用了。需要注意,由于字体已经制作为了位图,因此,大小是固定,所以应该根据需要,创建不同大小版本。当然,位图字体也提供了我们为游戏创建独一无二字体的能力。为了方便使用,通常把很多字体绘制到一张位图中,这就带来了另一个问题 : 如何从一张图片中识别某个字符呢? 很简单,常见的位图字图创建工具在创建位图的同时,还会创建一个 xml 文件。在这个文件中,记录了每个字符在位图中的位置,大小,下面是某个 xml 文件中,标示字母“ A ”的代码:
< glyph  ch ="A"  code ="0041"  bm ="0"  origin ="95,27"  size ="15x27"  aw ="14"  lsb ="0"   />
        
             就像查字典一样,通过这个 xml 文件,我们就能定位所要的字符。
(一张Bitmap Font)
         Bitmap Font Builder Bitmap Font Generator 都是创建位图字图不错的工具。特别是 Bitmap Font Generator ,会根据字体大小来排列字体,尽量减少位图尺寸。但这两个工具都不能很好的支持 Unicode ,也就是说,如果需要创建中文,那么可能会遇到一些问题。这里推荐使用 XNAExtras 工具包。 XNAExtras XNA Diares 提供的一系列助手程序和类。包含了 BMFontGen ,一个用于创建位图字体的,支持 Unicode 的小工具; BitmapFont ,可以使用 BMFontGen 创建的位图字体,方便的绘制字体的类。此外,他还包含了一些 Demo ,和一些用于绘制 sprite 的工具。如果有时间,最好仔细研究一下 BitmapFont 的源码,能让你对使用位图字体有更加深入的认识。万一觉得代码太复杂,那么不妨先看看 ziggyware 上另外一篇创建和绘制字体的教程。
--------------------------------------------------------------------------------上古分割线------------------------------------------------------
     
       上一次提到把Game类的AllowUserResizing设置为true就能改变窗口大小。不知你发现没有,缩放窗口时会出现一个bug,当前窗口会跑到桌面上所有窗口之下(如果你开了很多窗口)。解决方法是添加System.Windows.Forms;引用,接下来在程序初始化代码中为this.Window.ClientSizeChanged事件添加一个eventhandler,然后在eventhandler中添加如下代码:
((System.Windows.Forms.Form)System.Windows.Forms.Form.FromHandle(Window.Handle)).BringToFront();
ps:10月分的DirectX SDK中,将不再包含MDX 2.0,纪念一下~~~
 
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值