作者:clayman
仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。
Blog:http://blog.csdn.net/soilwork
[email protected]
在
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,纪念一下~~~