添加字体文件
首先,你需要在 Content 项目中添加字体文件。比如:下面的 myfont.spritefont。
调整字体
myfont.spritefont 是一个 xml 格式的文件,里面包含了需要使用的字体的信息,在 WP7SDK 中默认如下(已经省略部分代码)。
<FontName>Segoe UI Mono</FontName> <Size>14</Size> <Spacing>0</Spacing> <UseKerning>true</UseKerning> <Style>Regular</Style> <CharacterRegions> <CharacterRegion> <Start> </Start> <End>~</End> </CharacterRegion> </CharacterRegions>这些选项的具体设置方法都可以在 spritefont 文件中找到,比如:FontName 表示字体名称,Size 表示字体大小,UseKerning 表示是否使用 Spacing 指定的像素值来调整字符的间距,Style 为字体样式,多个样式可以用英文逗号来分割,CharacterRegions 中则包含要导入字体的范围,由 Start 和 End 给出的字符编码来决定。
设定资产名称
Content 项目中的每一个资源都有一个对应的资产名称,用于在之后引用这个资源。默认,请况下为资源的文件名(不包含扩展名)。这里我们的字体的资产名称为 myfont,不做修改。
字体的导入
在游戏编译的过程中,由 spritefont 文件指定的字体会自动的导入到生成的 xap 中,也就是用户最终下载安装的文件。所以,你不必担心用户的设备上是否拥有你指定的字体。
使用图片作为字体
在很多情况下,使用 spritefont 导入的字体效果受到限制,只有常见的粗体,斜体。所以,如果希望有更炫的效果,可以将需要的字预先做成图片(比如:加上发光的效果),按照指定顺序排列,并设置相关参数,然后导入到项目中即可,具体请参照(英文):http://blogs.msdn.com/b/shawnhar/archive/2007/04/26/bitmap-fonts-in-xna.aspx
载入字体
我们需要在 Game 类的 LoadContent 方法中载入刚刚加入的字体,并保存在字段中。
private SpriteFont font; protected override void LoadContent ( ) { // 创建新的 SpriteBatch,可将其用于绘制纹理。 spriteBatch = new SpriteBatch ( GraphicsDevice ); // TODO: 在此处使用 this.Content 加载游戏内容 this.font = this.Content.Load<SpriteFont> ( @"font/myfont" ); }上面的代码中,我们使用 Content 的 Load 方法来载入字体,这个方法也可以载入其它资源,需要指出的是,一定要给出正确的资源路径,这里我们的路径为 font/myfont,其中 myfont 就是字体的资产名称。
绘制字体
最后在 Game 的 Draw 方法中绘制你想要的文字即可。
protected override void Draw ( GameTime gameTime ) { GraphicsDevice.Clear ( Color.CornflowerBlue ); // TODO: 在此处添加绘图代码 this.spriteBatch.Begin ( ); this.spriteBatch.DrawString ( this.font, "New Font is Here!", new Vector2 ( 100, 100 ), Color.Red ); this.spriteBatch.End ( ); base.Draw ( gameTime ); }其中 spriteBatch 为在 LoadContent 中初始化的 SpriteBatch 类,该类是绘制文字和图片所必须的。你还必须在绘制的开始和结束分别调用 SpriteBatch 类的 Begin 和 End 方法,否则将出现错误。最后使用 DrawString 方法来绘制文字即可,第一个参数为我们导入的字体,第二个参数为文字内容,第二个参数为绘制位置,第四个参数是颜色,更多 DrawString 的信息,请参考:http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.drawstring.aspx
运行效果这里就不展示了,大家自己来尝试吧。