近期发布
专辑列表

Windows Phone 游戏合集
JQueryElement
IEBrowser
WPXNA

XNA 如何使用字体绘制文字,Windows Phone 游戏开发

添加字体文件

首先,你需要在 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>&#32;</Start>                 
    <End>&#126;</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

运行效果这里就不展示了,大家自己来尝试吧。

所在专辑:http://throw.diandian.com/post/xna-base

原文地址:http://throw.diandian.com/post/xna-use-font

posted @ 2012-09-26 15:56  麦丝平方  阅读(1684)  评论(1编辑  收藏  举报